1
0
mirror of synced 2025-12-25 02:09:19 -05:00

source-sage-hr contribution from parthiv11 (#46551)

Co-authored-by: Marcos Marx <marcosmarxm@users.noreply.github.com>
This commit is contained in:
Parthiv Makwana
2024-10-16 23:21:02 +05:30
committed by GitHub
parent f72d00fcf9
commit ad681de135
6 changed files with 1060 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
# Sage HR
This directory contains the manifest-only connector for `source-sage-hr`.
The Sage HR Airbyte Connector enables seamless data integration, allowing you to extract employee and HR data from Sage HR into your preferred data warehouse or analytics tool. Simplify data syncing for effortless employee management and streamline HR workflows.
## Usage
There are multiple ways to use this connector:
- You can use this connector as any other connector in Airbyte Marketplace.
- You can load this connector in `pyairbyte` using `get_source`!
- You can open this connector in Connector Builder, edit it, and publish to your workspaces.
Please refer to the manifest-only connector documentation for more details.
## Local Development
We recommend you use the Connector Builder to edit this connector.
But, if you want to develop this connector locally, you can use the following steps.
### Environment Setup
You will need `airbyte-ci` installed. You can find the documentation [here](airbyte-ci).
### Build
This will create a dev image (`source-sage-hr:dev`) that you can use to test the connector locally.
```bash
airbyte-ci connectors --name=source-sage-hr build
```
### Test
This will run the acceptance tests for the connector.
```bash
airbyte-ci connectors --name=source-sage-hr test
```

View File

@@ -0,0 +1,17 @@
# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference)
# for more information about how to configure these tests
connector_image: airbyte/source-sage-hr:dev
acceptance_tests:
spec:
tests:
- spec_path: "manifest.yaml"
connection:
bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
discovery:
bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
basic_read:
bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
incremental:
bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
full_refresh:
bypass_reason: "This is a builder contribution, and we do not have secrets at this time"

View File

@@ -0,0 +1,8 @@
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M42.4043 0H5.59573C2.50529 0 0 2.50529 0 5.59573V42.4043C0 45.4947 2.50529 48 5.59573 48H42.4043C45.4947 48 48 45.4947 48 42.4043V5.59573C48 2.50529 45.4947 0 42.4043 0Z" fill="white"/>
<path d="M31.347 16.8776C32.97 16.8776 34.2858 15.5618 34.2858 13.9388C34.2858 12.3157 32.97 11 31.347 11C29.7239 11 28.4082 12.3157 28.4082 13.9388C28.4082 15.5618 29.7239 16.8776 31.347 16.8776Z" fill="#00D639"/>
<path d="M16.347 16.8776C17.97 16.8776 19.2858 15.5618 19.2858 13.9388C19.2858 12.3157 17.97 11 16.347 11C14.7239 11 13.4082 12.3157 13.4082 13.9388C13.4082 15.5618 14.7239 16.8776 16.347 16.8776Z" fill="#00D639"/>
<path d="M31.9804 20.5365C31.841 20.0552 31.1591 20.0552 31.0198 20.5365L26.1851 37.2383C26.0925 37.5581 26.3324 37.8774 26.6653 37.8774H36.3348C36.6677 37.8774 36.9077 37.5581 36.8151 37.2383L31.9804 20.5365Z" fill="black"/>
<path d="M16.9804 20.5365C16.841 20.0552 16.1591 20.0552 16.0198 20.5365L11.1851 37.2383C11.0925 37.5581 11.3324 37.8774 11.6653 37.8774H21.3348C21.6677 37.8774 21.9077 37.5581 21.8151 37.2383L16.9804 20.5365Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,931 @@
version: 5.11.1
type: DeclarativeSource
description: >-
The Sage HR Airbyte Connector enables seamless data integration, allowing you
to extract employee and HR data from Sage HR into your preferred data
warehouse or analytics tool. Simplify data syncing for effortless employee
management and streamline HR workflows.
check:
type: CheckStream
stream_names:
- employees
definitions:
streams:
employees:
type: DeclarativeStream
name: employees
primary_key:
- id
retriever:
type: SimpleRetriever
requester:
$ref: "#/definitions/base_requester"
path: /employees
http_method: GET
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- data
paginator:
type: DefaultPaginator
page_token_option:
type: RequestOption
inject_into: request_parameter
field_name: page
pagination_strategy:
type: PageIncrement
page_size: 30
start_from_page: 1
inject_on_first_request: true
schema_loader:
type: InlineSchemaLoader
schema:
$ref: "#/schemas/employees"
leave-management-policies:
type: DeclarativeStream
name: leave-management-policies
primary_key:
- id
retriever:
type: SimpleRetriever
requester:
$ref: "#/definitions/base_requester"
path: /leave-management/policies
http_method: GET
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- data
schema_loader:
type: InlineSchemaLoader
schema:
$ref: "#/schemas/leave-management-policies"
documents:
type: DeclarativeStream
name: documents
primary_key:
- id
retriever:
type: SimpleRetriever
requester:
$ref: "#/definitions/base_requester"
path: /documents
http_method: GET
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- data
paginator:
type: DefaultPaginator
page_token_option:
type: RequestOption
inject_into: request_parameter
field_name: page
pagination_strategy:
type: PageIncrement
start_from_page: 1
page_size: 30
inject_on_first_request: true
schema_loader:
type: InlineSchemaLoader
schema:
$ref: "#/schemas/documents"
positions:
type: DeclarativeStream
name: positions
primary_key:
- id
retriever:
type: SimpleRetriever
requester:
$ref: "#/definitions/base_requester"
path: /positions
http_method: GET
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- data
paginator:
type: DefaultPaginator
page_token_option:
type: RequestOption
inject_into: request_parameter
field_name: page
pagination_strategy:
type: PageIncrement
page_size: 30
start_from_page: 1
inject_on_first_request: true
schema_loader:
type: InlineSchemaLoader
schema:
$ref: "#/schemas/positions"
teams:
type: DeclarativeStream
name: teams
primary_key:
- id
retriever:
type: SimpleRetriever
requester:
$ref: "#/definitions/base_requester"
path: /teams
http_method: GET
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- data
paginator:
type: DefaultPaginator
page_token_option:
type: RequestOption
inject_into: request_parameter
field_name: page
pagination_strategy:
type: PageIncrement
page_size: 30
start_from_page: 1
inject_on_first_request: true
schema_loader:
type: InlineSchemaLoader
schema:
$ref: "#/schemas/teams"
terminated-employees:
type: DeclarativeStream
name: terminated-employees
primary_key:
- id
retriever:
type: SimpleRetriever
requester:
$ref: "#/definitions/base_requester"
path: /terminated-employees
http_method: GET
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- data
paginator:
type: DefaultPaginator
page_token_option:
type: RequestOption
inject_into: request_parameter
field_name: page
pagination_strategy:
type: PageIncrement
page_size: 30
start_from_page: 1
inject_on_first_request: true
schema_loader:
type: InlineSchemaLoader
schema:
$ref: "#/schemas/terminated-employees"
termination-reasons:
type: DeclarativeStream
name: termination-reasons
primary_key:
- id
retriever:
type: SimpleRetriever
requester:
$ref: "#/definitions/base_requester"
path: /termination-reasons
http_method: GET
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- data
paginator:
type: DefaultPaginator
page_token_option:
type: RequestOption
inject_into: request_parameter
field_name: page
pagination_strategy:
type: PageIncrement
page_size: 30
start_from_page: 1
inject_on_first_request: true
schema_loader:
type: InlineSchemaLoader
schema:
$ref: "#/schemas/termination-reasons"
individual-allowances:
type: DeclarativeStream
name: individual-allowances
primary_key:
- id
retriever:
type: SimpleRetriever
requester:
$ref: "#/definitions/base_requester"
path: /leave-management/reports/individual-allowances
http_method: GET
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- data
paginator:
type: DefaultPaginator
page_token_option:
type: RequestOption
inject_into: request_parameter
field_name: page
pagination_strategy:
type: PageIncrement
page_size: 30
start_from_page: 1
inject_on_first_request: true
schema_loader:
type: InlineSchemaLoader
schema:
$ref: "#/schemas/individual-allowances"
document-categories:
type: DeclarativeStream
name: document-categories
primary_key:
- id
retriever:
type: SimpleRetriever
requester:
$ref: "#/definitions/base_requester"
path: /documents/categories
http_method: GET
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- data
schema_loader:
type: InlineSchemaLoader
schema:
$ref: "#/schemas/document-categories"
offboarding-categories:
type: DeclarativeStream
name: offboarding-categories
primary_key:
- id
retriever:
type: SimpleRetriever
requester:
$ref: "#/definitions/base_requester"
path: /offboarding/categories
http_method: GET
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- data
paginator:
type: DefaultPaginator
page_token_option:
type: RequestOption
inject_into: request_parameter
field_name: page
pagination_strategy:
type: PageIncrement
page_size: 30
start_from_page: 1
inject_on_first_request: true
schema_loader:
type: InlineSchemaLoader
schema:
$ref: "#/schemas/offboarding-categories"
onboarding-categories:
type: DeclarativeStream
name: onboarding-categories
primary_key:
- id
retriever:
type: SimpleRetriever
requester:
$ref: "#/definitions/base_requester"
path: onboarding/categories
http_method: GET
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- data
paginator:
type: DefaultPaginator
page_token_option:
type: RequestOption
inject_into: request_parameter
field_name: page
pagination_strategy:
type: PageIncrement
page_size: 30
start_from_page: 1
inject_on_first_request: true
schema_loader:
type: InlineSchemaLoader
schema:
$ref: "#/schemas/onboarding-categories"
leave-requests:
type: DeclarativeStream
name: leave-requests
primary_key:
- id
retriever:
type: SimpleRetriever
requester:
$ref: "#/definitions/base_requester"
path: /leave-management/requests
http_method: GET
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- data
paginator:
type: DefaultPaginator
page_token_option:
type: RequestOption
inject_into: request_parameter
field_name: page
pagination_strategy:
type: PageIncrement
page_size: 30
start_from_page: 1
inject_on_first_request: true
schema_loader:
type: InlineSchemaLoader
schema:
$ref: "#/schemas/leave-requests"
base_requester:
type: HttpRequester
url_base: https://{{ config['subdomain'] }}.sage.hr/api/
authenticator:
type: ApiKeyAuthenticator
api_token: "{{ config[\"api_key\"] }}"
inject_into:
type: RequestOption
field_name: X-Auth-Token
inject_into: header
streams:
- $ref: "#/definitions/streams/employees"
- $ref: "#/definitions/streams/leave-management-policies"
- $ref: "#/definitions/streams/documents"
- $ref: "#/definitions/streams/positions"
- $ref: "#/definitions/streams/teams"
- $ref: "#/definitions/streams/terminated-employees"
- $ref: "#/definitions/streams/termination-reasons"
- $ref: "#/definitions/streams/individual-allowances"
- $ref: "#/definitions/streams/document-categories"
- $ref: "#/definitions/streams/offboarding-categories"
- $ref: "#/definitions/streams/onboarding-categories"
- $ref: "#/definitions/streams/leave-requests"
spec:
type: Spec
connection_specification:
type: object
$schema: http://json-schema.org/draft-07/schema#
required:
- api_key
- subdomain
properties:
api_key:
type: string
name: api_key
order: 0
title: API Key
airbyte_secret: true
subdomain:
type: string
order: 1
title: subdomain
additionalProperties: true
metadata:
autoImportSchema:
employees: true
leave-management-policies: false
documents: false
positions: false
teams: false
terminated-employees: false
termination-reasons: true
individual-allowances: false
document-categories: false
offboarding-categories: false
onboarding-categories: false
leave-requests: false
testedStreams:
employees:
streamHash: c1c52bac2f855a5a9ddc6d85c739f8b5c7d7f1c8
hasResponse: true
responsesAreSuccessful: true
hasRecords: true
primaryKeysArePresent: true
primaryKeysAreUnique: true
leave-management-policies:
streamHash: 75aee0808e8547e8dbd6727ef7dea5c2055f34a3
hasResponse: true
responsesAreSuccessful: true
hasRecords: true
primaryKeysArePresent: true
primaryKeysAreUnique: true
documents:
streamHash: c34a9651675ae4c0e1da808835aa277d5994036d
hasResponse: true
responsesAreSuccessful: true
hasRecords: true
primaryKeysArePresent: true
primaryKeysAreUnique: true
positions:
streamHash: bc6a2889d3472d2852e3180736c2f9ec238b1a9c
hasResponse: true
responsesAreSuccessful: true
hasRecords: true
primaryKeysArePresent: true
primaryKeysAreUnique: true
teams:
streamHash: aa0f7219f8b8cbc6c76718d54fc461b0c1df5fff
hasResponse: true
responsesAreSuccessful: true
hasRecords: true
primaryKeysArePresent: true
primaryKeysAreUnique: true
terminated-employees:
streamHash: d1083bface3557a2e078c2206e3e35bdfb291d63
hasResponse: true
responsesAreSuccessful: true
hasRecords: true
primaryKeysArePresent: true
primaryKeysAreUnique: true
termination-reasons:
streamHash: 7cc49c6aab5d11d0b76be2f0aaadccc662a2aa8f
hasResponse: true
responsesAreSuccessful: true
hasRecords: true
primaryKeysArePresent: true
primaryKeysAreUnique: true
individual-allowances:
streamHash: 042acbef3a7a20f47c3ac28281b713af5d8330d6
hasResponse: true
responsesAreSuccessful: true
hasRecords: true
primaryKeysArePresent: true
primaryKeysAreUnique: true
document-categories:
streamHash: b528b0a9da72113b40c5d394ce6f88017513b5e4
hasResponse: true
responsesAreSuccessful: true
hasRecords: true
primaryKeysArePresent: true
primaryKeysAreUnique: true
offboarding-categories:
streamHash: 03f27f7fdcf924dbfb1473fbdcc489725587125a
hasResponse: true
responsesAreSuccessful: true
hasRecords: true
primaryKeysArePresent: true
primaryKeysAreUnique: true
onboarding-categories:
streamHash: a916e054b284a2228353ec583ce4b35605851d4e
hasResponse: true
responsesAreSuccessful: true
hasRecords: true
primaryKeysArePresent: true
primaryKeysAreUnique: true
leave-requests:
streamHash: b2a18c9b8b92858b7399a11252dbcbc6cc336203
hasResponse: true
responsesAreSuccessful: true
hasRecords: true
primaryKeysArePresent: true
primaryKeysAreUnique: true
assist:
docsUrl: https://sagehr.docs.apiary.io/
openapiSpecUrl: https://developer.sage.com/hr/reference/sage-hr-v1.0.swagger.yml
schemas:
employees:
type: object
$schema: http://json-schema.org/schema#
additionalProperties: true
properties:
email:
type:
- string
- "null"
employment_start_date:
type:
- string
- "null"
employment_status:
type:
- string
- "null"
first_name:
type:
- string
- "null"
id:
type: number
irregular_contract_worker:
type:
- boolean
- "null"
last_name:
type:
- string
- "null"
personal_identification_number:
type:
- string
- "null"
position:
type:
- string
- "null"
position_id:
type:
- number
- "null"
reports_to_employee_id:
type:
- number
- "null"
tax_number:
type:
- string
- "null"
required:
- id
leave-management-policies:
type: object
$schema: http://json-schema.org/draft-07/schema#
additionalProperties: true
properties: {}
documents:
type: object
$schema: http://json-schema.org/schema#
additionalProperties: true
properties:
description:
type:
- string
- "null"
acceptance_required:
type:
- boolean
- "null"
company_id:
type:
- number
- "null"
created_at:
type:
- string
- "null"
created_by:
type:
- number
- "null"
document_category_id:
type:
- number
- "null"
document_expires:
type:
- boolean
- "null"
file_content_type:
type:
- string
- "null"
file_name:
type:
- string
- "null"
file_scan_result:
type:
- string
- "null"
file_scan_started_at:
type:
- string
- "null"
file_size:
type:
- number
- "null"
file_updated_at:
type:
- string
- "null"
id:
type: number
last_edited_by:
type:
- number
- "null"
right_to_work_number:
type:
- string
- "null"
shared_with_direct_manager:
type:
- boolean
- "null"
shared_with_everyone:
type:
- boolean
- "null"
shared_with_team_manager:
type:
- boolean
- "null"
source:
type:
- string
- "null"
updated_at:
type:
- string
- "null"
required:
- id
positions:
type: object
$schema: http://json-schema.org/draft-07/schema#
additionalProperties: true
properties: {}
teams:
type: object
$schema: http://json-schema.org/draft-07/schema#
additionalProperties: true
properties: {}
terminated-employees:
type: object
$schema: http://json-schema.org/schema#
additionalProperties: true
properties:
email:
type:
- string
- "null"
employment_start_date:
type:
- string
- "null"
employment_status:
type:
- string
- "null"
first_name:
type:
- string
- "null"
id:
type: number
irregular_contract_worker:
type:
- boolean
- "null"
last_name:
type:
- string
- "null"
personal_identification_number:
type:
- string
- "null"
position:
type:
- string
- "null"
tax_number:
type:
- string
- "null"
team:
type:
- string
- "null"
team_id:
type:
- number
- "null"
termination_date:
type:
- string
- "null"
required:
- id
termination-reasons:
type: object
$schema: http://json-schema.org/schema#
additionalProperties: true
properties:
type:
type:
- string
- "null"
id:
type: number
name:
type:
- string
- "null"
required:
- id
individual-allowances:
type: object
$schema: http://json-schema.org/schema#
additionalProperties: true
properties:
eligibilities:
type:
- array
- "null"
items:
type:
- object
- "null"
properties:
carryover:
type:
- string
- "null"
policy:
type:
- object
- "null"
properties:
id:
type:
- number
- "null"
name:
type:
- string
- "null"
quantity:
type:
- string
- "null"
unit:
type:
- string
- "null"
full_name:
type:
- string
- "null"
id:
type: number
required:
- id
document-categories:
type: object
$schema: http://json-schema.org/schema#
additionalProperties: true
properties:
documents_count:
type:
- number
- "null"
id:
type: number
name:
type:
- string
- "null"
required:
- id
offboarding-categories:
type: object
$schema: http://json-schema.org/schema#
additionalProperties: true
properties:
id:
type: number
title:
type:
- string
- "null"
required:
- id
onboarding-categories:
type: object
$schema: http://json-schema.org/schema#
additionalProperties: true
properties:
id:
type: number
title:
type:
- string
- "null"
required:
- id
leave-requests:
type: object
$schema: http://json-schema.org/schema#
additionalProperties: true
properties:
details:
type:
- string
- "null"
employee_id:
type:
- number
- "null"
end_date:
type:
- string
- "null"
fields:
type:
- array
- "null"
first_part_of_day:
type:
- boolean
- "null"
hours:
type:
- number
- "null"
id:
type: number
is_multi_date:
type:
- boolean
- "null"
is_part_of_day:
type:
- boolean
- "null"
is_single_day:
type:
- boolean
- "null"
policy_id:
type:
- number
- "null"
request_date:
type:
- string
- "null"
second_part_of_day:
type:
- boolean
- "null"
shared_person_name:
type:
- string
- "null"
shared_person_nin:
type:
- string
- "null"
specific_time:
type:
- boolean
- "null"
start_date:
type:
- string
- "null"
status:
type:
- string
- "null"
status_code:
type:
- string
- "null"
required:
- id

View File

@@ -0,0 +1,35 @@
metadataSpecVersion: "1.0"
data:
allowedHosts:
hosts:
- "https://*.sage.hr/api/"
registryOverrides:
oss:
enabled: true
cloud:
enabled: true
remoteRegistries:
pypi:
enabled: false
packageName: airbyte-source-sage-hr
connectorBuildOptions:
baseImage: docker.io/airbyte/source-declarative-manifest:5.11.1@sha256:f48a7ddc1f3acecbd8eb6a10a3146e8d0396e9a4dede77beafb76924f416df65
connectorSubtype: api
connectorType: source
definitionId: d8384215-9de6-4268-bbea-40c636ee14c7
dockerImageTag: 0.0.1
dockerRepository: airbyte/source-sage-hr
githubIssueLabel: source-sage-hr
icon: icon.svg
license: MIT
name: Sage HR
releaseDate: 2024-10-08
releaseStage: alpha
supportLevel: community
documentationUrl: https://docs.airbyte.com/integrations/sources/sage-hr
tags:
- language:manifest-only
- cdk:low-code
ab_internal:
ql: 100
sl: 100

View File

@@ -0,0 +1,36 @@
# Sage HR
The Sage HR Airbyte Connector enables seamless data integration, allowing you to extract employee and HR data from Sage HR into your preferred data warehouse or analytics tool. Simplify data syncing for effortless employee management and streamline HR workflows.
## Configuration
| Input | Type | Description | Default Value |
|-------|------|-------------|---------------|
| `api_key` | `string` | API Key. | |
| `subdomain` | `string` | subdomain. | |
## Streams
| Stream Name | Primary Key | Pagination | Supports Full Sync | Supports Incremental |
|-------------|-------------|------------|---------------------|----------------------|
| employees | id | DefaultPaginator | ✅ | ❌ |
| leave-management-policies | id | No pagination | ✅ | ❌ |
| documents | id | DefaultPaginator | ✅ | ❌ |
| positions | id | DefaultPaginator | ✅ | ❌ |
| teams | id | DefaultPaginator | ✅ | ❌ |
| terminated-employees | id | DefaultPaginator | ✅ | ❌ |
| termination-reasons | id | DefaultPaginator | ✅ | ❌ |
| individual-allowances | id | DefaultPaginator | ✅ | ❌ |
| document-categories | id | No pagination | ✅ | ❌ |
| offboarding-categories | id | DefaultPaginator | ✅ | ❌ |
| onboarding-categories | id | DefaultPaginator | ✅ | ❌ |
| leave-requests | id | DefaultPaginator | ✅ | ❌ |
## Changelog
<details>
<summary>Expand to review</summary>
| Version | Date | Pull Request | Subject |
|------------------|-------------------|--------------|----------------|
| 0.0.1 | 2024-10-08 | | Initial release by [@parthiv11](https://github.com/parthiv11) via Connector Builder |
</details>