tap-belvo 0.1.0__tar.gz → 0.1.0a2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of tap-belvo might be problematic. Click here for more details.

Files changed (36) hide show
  1. tap_belvo-0.1.0a2/.github/dependabot.yml +48 -0
  2. tap_belvo-0.1.0a2/.github/workflows/constraints.txt +2 -0
  3. tap_belvo-0.1.0a2/.github/workflows/dynamic-publish.yaml +39 -0
  4. tap_belvo-0.1.0a2/.github/workflows/test.yml +90 -0
  5. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/.pre-commit-config.yaml +5 -13
  6. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/PKG-INFO +23 -8
  7. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/README.md +9 -3
  8. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/meltano.yml +2 -6
  9. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/plugins/loaders/target-duckdb--jwills.lock +63 -64
  10. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/plugins/loaders/target-jsonl--andyh1203.lock +1 -1
  11. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/pyproject.toml +44 -32
  12. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/tap_belvo/client.py +1 -1
  13. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/tap_belvo/openapi/__init__.py +8 -3
  14. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/tests/test_core.py +1 -1
  15. tap_belvo-0.1.0/.github/CODEOWNERS +0 -2
  16. tap_belvo-0.1.0/.github/renovate.json5 +0 -8
  17. tap_belvo-0.1.0/.github/workflows/dynamic-publish.yaml +0 -42
  18. tap_belvo-0.1.0/.github/workflows/test.yml +0 -93
  19. tap_belvo-0.1.0/tox.ini +0 -39
  20. tap_belvo-0.1.0/uv.lock +0 -1110
  21. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/.copier-answers.yml +0 -0
  22. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/.gitignore +0 -0
  23. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/.secrets/.gitignore +0 -0
  24. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/LICENSE +0 -0
  25. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/output/.gitignore +0 -0
  26. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/tap_belvo/__init__.py +0 -0
  27. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/tap_belvo/__main__.py +0 -0
  28. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/tap_belvo/openapi/BelvoOpenFinanceApiSpec.json +0 -0
  29. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/tap_belvo/streams/__init__.py +6 -6
  30. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/tap_belvo/streams/banking.py +0 -0
  31. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/tap_belvo/streams/core.py +0 -0
  32. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/tap_belvo/streams/enrichment.py +0 -0
  33. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/tap_belvo/streams/fiscal.py +0 -0
  34. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/tap_belvo/tap.py +0 -0
  35. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/tests/__init__.py +0 -0
  36. {tap_belvo-0.1.0 → tap_belvo-0.1.0a2}/tests/conftest.py +0 -0
@@ -0,0 +1,48 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: pip
9
+ directory: "/"
10
+ schedule:
11
+ interval: weekly
12
+ reviewers:
13
+ - "edgarrmondragon"
14
+ versioning-strategy: increase-if-necessary
15
+ commit-message:
16
+ prefix: "chore(deps): "
17
+ prefix-development: "chore(deps-dev): "
18
+ groups:
19
+ development-dependencies:
20
+ dependency-type: development
21
+ runtime-dependencies:
22
+ dependency-type: production
23
+ update-types:
24
+ - "patch"
25
+ - package-ecosystem: pip
26
+ directory: "/.github/workflows"
27
+ schedule:
28
+ interval: monthly
29
+ reviewers:
30
+ - "edgarrmondragon"
31
+ commit-message:
32
+ prefix: "ci: "
33
+ groups:
34
+ ci:
35
+ patterns:
36
+ - "*"
37
+ - package-ecosystem: github-actions
38
+ directory: "/"
39
+ schedule:
40
+ interval: monthly
41
+ reviewers:
42
+ - "edgarrmondragon"
43
+ commit-message:
44
+ prefix: "ci: "
45
+ groups:
46
+ actions:
47
+ patterns:
48
+ - "*"
@@ -0,0 +1,2 @@
1
+ pip==24.2
2
+ hatch==1.12.0
@@ -0,0 +1,39 @@
1
+ name: Build and publish
2
+
3
+ on:
4
+ push:
5
+
6
+ jobs:
7
+ build:
8
+ name: Build wheel and sdist
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ with:
13
+ fetch-depth: 0
14
+ - uses: hynek/build-and-inspect-python-package@v2
15
+
16
+ publish:
17
+ name: Publish to PyPI
18
+ if: startsWith(github.ref, 'refs/tags/')
19
+ runs-on: ubuntu-latest
20
+ needs: build
21
+ environment:
22
+ name: pypi
23
+ url: https://pypi.org/p/tap-belvo/
24
+ permissions:
25
+ contents: write
26
+ id-token: write
27
+
28
+ steps:
29
+ - uses: actions/download-artifact@v4
30
+ with:
31
+ name: Packages
32
+ path: dist
33
+ - uses: svenstaro/upload-release-action@v2
34
+ with:
35
+ file: dist/*.whl
36
+ tag: ${{ github.ref }}
37
+ overwrite: true
38
+ file_glob: true
39
+ - uses: pypa/gh-action-pypi-publish@v1.10.3
@@ -0,0 +1,90 @@
1
+ name: Test tap-belvo
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - tap_belvo/**
8
+ - tests/**
9
+ - pyproject.toml
10
+ - .github/workflows/test.yml
11
+ - .github/workflows/constraints.txt
12
+ pull_request:
13
+ types: [opened, synchronize, reopened]
14
+ paths:
15
+ - tap_belvo/**
16
+ - tests/**
17
+ - pyproject.toml
18
+ - .github/workflows/test.yml
19
+ - .github/workflows/constraints.txt
20
+ workflow_dispatch:
21
+ schedule:
22
+ - cron: "0 10 * * *"
23
+
24
+ jobs:
25
+ tests:
26
+ runs-on: ubuntu-latest
27
+ env:
28
+ FORCE_COLOR: "1"
29
+ PIP_CONSTRAINT: ${{ github.workspace }}/.github/workflows/constraints.txt
30
+ strategy:
31
+ fail-fast: false
32
+ matrix:
33
+ script: ["test:integration"]
34
+ python-version:
35
+ - "3.8"
36
+ - "3.9"
37
+ - "3.10"
38
+ - "3.11"
39
+ - "3.12"
40
+ - "3.13"
41
+ include:
42
+ - { script: "test:dependencies", python-version: "3.x" }
43
+ - { script: "typing:check", python-version: "3.x" }
44
+
45
+ steps:
46
+ - uses: actions/checkout@v4
47
+ - uses: actions/setup-python@v5
48
+ id: setup-python
49
+ with:
50
+ python-version: ${{ matrix.python-version }}
51
+ allow-prereleases: true
52
+ cache: pip
53
+
54
+ - name: Upgrade pip
55
+ run: |
56
+ pip install pip
57
+ pip --version
58
+
59
+ - name: Install Hatch
60
+ run: |
61
+ pipx install --python '${{ steps.setup-python.outputs.python-path }}' hatch
62
+ hatch --version
63
+
64
+ - name: Run
65
+ env:
66
+ TAP_BELVO_SECRET_ID: ${{ secrets.TAP_BELVO_SECRET_ID }}
67
+ TAP_BELVO_PASSWORD: ${{ secrets.TAP_BELVO_PASSWORD }}
68
+ TAP_BELVO_BASE_URL: https://sandbox.belvo.com
69
+ run: |
70
+ hatch run ${{ matrix.script }}
71
+
72
+ pre-commit:
73
+ runs-on: ubuntu-latest
74
+ env:
75
+ FORCE_COLOR: "1"
76
+ steps:
77
+ - name: Checkout code
78
+ uses: actions/checkout@v4
79
+
80
+ - name: Set up Python
81
+ uses: actions/setup-python@v5
82
+ with:
83
+ python-version: "3.x"
84
+ cache: pip
85
+ cache-dependency-path: .pre-commit-config.yaml
86
+
87
+ - uses: pre-commit/action@v3.0.1
88
+
89
+ - uses: pre-commit-ci/lite-action@v1.0.3
90
+ if: always()
@@ -1,14 +1,12 @@
1
1
  ci:
2
2
  autofix_prs: false
3
3
  autofix_commit_msg: '[pre-commit.ci] auto fixes'
4
- autoupdate_schedule: monthly
4
+ autoupdate_schedule: weekly
5
5
  autoupdate_commit_msg: 'chore(deps): pre-commit autoupdate'
6
- skip:
7
- - uv-lock
8
6
 
9
7
  repos:
10
8
  - repo: https://github.com/pre-commit/pre-commit-hooks
11
- rev: v5.0.0
9
+ rev: v4.6.0
12
10
  hooks:
13
11
  - id: check-json
14
12
  exclude: "\\.vscode/.*.json"
@@ -19,24 +17,18 @@ repos:
19
17
  - id: trailing-whitespace
20
18
 
21
19
  - repo: https://github.com/tox-dev/pyproject-fmt
22
- rev: "v2.5.1"
20
+ rev: "2.2.1"
23
21
  hooks:
24
22
  - id: pyproject-fmt
25
23
 
26
24
  - repo: https://github.com/astral-sh/ruff-pre-commit
27
- rev: "v0.11.2"
25
+ rev: "v0.6.3"
28
26
  hooks:
29
27
  - id: ruff
30
28
  args: [--fix, --exit-non-zero-on-fix, --show-fixes]
31
29
  - id: ruff-format
32
30
 
33
31
  - repo: https://github.com/pre-commit/pre-commit
34
- rev: v4.2.0
32
+ rev: v3.8.0
35
33
  hooks:
36
34
  - id: validate_manifest
37
-
38
- - repo: https://github.com/astral-sh/uv-pre-commit
39
- rev: "0.6.10"
40
- hooks:
41
- - id: uv-lock
42
- - id: uv-sync
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.3
2
2
  Name: tap-belvo
3
- Version: 0.1.0
3
+ Version: 0.1.0a2
4
4
  Summary: Singer tap for Belvo, built with the Meltano SDK for Singer Taps.
5
5
  Project-URL: Documentation, https://github.com/edgarrmondragon/tap-belvo#readme
6
6
  Project-URL: Homepage, https://github.com/edgarrmondragon/tap-belvo
@@ -11,15 +11,24 @@ License-Expression: Apache-2.0
11
11
  License-File: LICENSE
12
12
  Keywords: Belvo,ELT,singer.io
13
13
  Classifier: Programming Language :: Python :: 3 :: Only
14
+ Classifier: Programming Language :: Python :: 3.8
14
15
  Classifier: Programming Language :: Python :: 3.9
15
16
  Classifier: Programming Language :: Python :: 3.10
16
17
  Classifier: Programming Language :: Python :: 3.11
17
18
  Classifier: Programming Language :: Python :: 3.12
18
19
  Classifier: Programming Language :: Python :: 3.13
19
- Requires-Python: >=3.9
20
+ Requires-Python: >=3.8
21
+ Requires-Dist: importlib-resources; python_version < '3.9'
22
+ Requires-Dist: requests
20
23
  Requires-Dist: requests-cache==1.*
21
- Requires-Dist: requests~=2.32.3
22
- Requires-Dist: singer-sdk~=0.45.3
24
+ Requires-Dist: singer-sdk~=0.41.0
25
+ Provides-Extra: testing
26
+ Requires-Dist: deptry>=0.12; extra == 'testing'
27
+ Requires-Dist: pytest>=7.4; extra == 'testing'
28
+ Requires-Dist: singer-sdk[testing]; extra == 'testing'
29
+ Provides-Extra: typing
30
+ Requires-Dist: mypy; extra == 'typing'
31
+ Requires-Dist: types-requests; extra == 'typing'
23
32
  Description-Content-Type: text/markdown
24
33
 
25
34
  # `tap-belvo`
@@ -73,15 +82,21 @@ tap-belvo --config CONFIG --discover > ./catalog.json
73
82
  ### Initialize your Development Environment
74
83
 
75
84
  ```bash
76
- uv tool install --with tox-uv tox
85
+ pipx install hatch
77
86
  ```
78
87
 
79
88
  ### Create and Run Tests
80
89
 
81
- Run all tests:
90
+ Run integration tests:
82
91
 
83
92
  ```bash
84
- tox run-parallel
93
+ hatch run test:integration
94
+ ```
95
+
96
+ You can also test the `tap-belvo` CLI interface directly:
97
+
98
+ ```bash
99
+ hatch run sync:console -- --about --format=json
85
100
  ```
86
101
 
87
102
  ### Testing with [Meltano](https://www.meltano.com)
@@ -49,15 +49,21 @@ tap-belvo --config CONFIG --discover > ./catalog.json
49
49
  ### Initialize your Development Environment
50
50
 
51
51
  ```bash
52
- uv tool install --with tox-uv tox
52
+ pipx install hatch
53
53
  ```
54
54
 
55
55
  ### Create and Run Tests
56
56
 
57
- Run all tests:
57
+ Run integration tests:
58
58
 
59
59
  ```bash
60
- tox run-parallel
60
+ hatch run test:integration
61
+ ```
62
+
63
+ You can also test the `tap-belvo` CLI interface directly:
64
+
65
+ ```bash
66
+ hatch run sync:console -- --about --format=json
61
67
  ```
62
68
 
63
69
  ### Testing with [Meltano](https://www.meltano.com)
@@ -24,12 +24,10 @@ plugins:
24
24
  kind: password
25
25
  label: Secret ID
26
26
  description: Belvo API secret ID
27
- sensitive: true
28
27
  - name: password
29
28
  kind: password
30
29
  label: Password
31
30
  description: Belvo API password
32
- sensitive: true
33
31
  - name: base_url
34
32
  kind: string
35
33
  value: https://development.belvo.com
@@ -42,8 +40,8 @@ plugins:
42
40
  config:
43
41
  start_date: '2022-11-21'
44
42
  select:
45
- - links_*.*
46
- - banking_*.*
43
+ - "links_*.*"
44
+ - "banking_*.*"
47
45
  repository: https://github.com/edgarrmondragon/tap-belvo
48
46
  loaders:
49
47
  - name: target-jsonl
@@ -55,5 +53,3 @@ plugins:
55
53
  config:
56
54
  filepath: output/wh.duckdb
57
55
  default_target_schema: $MELTANO_ENVIRONMENT
58
- venv:
59
- backend: uv
@@ -11,37 +11,25 @@
11
11
  "logo_url": "https://hub.meltano.com/assets/logos/loaders/duckdb.png",
12
12
  "settings_group_validation": [
13
13
  [
14
- "default_target_schema",
15
- "filepath"
14
+ "filepath",
15
+ "default_target_schema"
16
16
  ]
17
17
  ],
18
18
  "settings": [
19
19
  {
20
- "name": "add_metadata_columns",
21
- "kind": "boolean",
22
- "value": false,
23
- "label": "Add Metadata Columns",
24
- "description": "Metadata columns add extra row level information about data ingestions, (i.e. when was the row read in source, when was inserted or deleted in postgres etc.) Metadata columns are creating automatically by adding extra columns to the tables with a column prefix _SDC_. The column names are following the stitch naming conventions documented at https://www.stitchdata.com/docs/data-structure/integration-schemas#sdc-columns. Enabling metadata columns will flag the deleted rows by setting the _SDC_DELETED_AT metadata column. Without the add_metadata_columns option the deleted rows from singer taps will not be recognisable in DuckDB."
25
- },
26
- {
27
- "name": "batch_size_rows",
28
- "kind": "integer",
29
- "value": 100000,
30
- "label": "Batch Size Rows",
31
- "description": "Maximum number of rows in each batch. At the end of each batch, the rows in the batch are loaded into DuckDB."
32
- },
33
- {
34
- "name": "data_flattening_max_level",
35
- "kind": "integer",
36
- "value": 0,
37
- "label": "Data Flattening Max Level",
38
- "description": "Object type RECORD items from taps can be transformed to flattened columns by creating columns automatically.\n\nWhen value is 0 (default) then flattening functionality is turned off.\n"
20
+ "name": "path",
21
+ "kind": "string",
22
+ "label": "Connection Path",
23
+ "description": "The path to use for the `duckdb.connect` call; either a local file or a MotherDuck connection uri.",
24
+ "placeholder": "/path/to/local/file.duckdb"
39
25
  },
40
26
  {
41
- "name": "database",
27
+ "name": "filepath",
42
28
  "kind": "string",
43
- "label": "Database name",
44
- "description": "Alias of `dbname`."
29
+ "value": "${MELTANO_PROJECT_ROOT}/output/warehouse.duckdb",
30
+ "label": "File Path",
31
+ "description": "Alias of `path`.",
32
+ "placeholder": "/path/to/local/file.duckdb"
45
33
  },
46
34
  {
47
35
  "name": "dbname",
@@ -50,11 +38,16 @@
50
38
  "description": "The database name to write to; this will be inferred from the path property if it is not specified."
51
39
  },
52
40
  {
53
- "name": "default_target_schema",
41
+ "name": "database",
54
42
  "kind": "string",
55
- "value": "$MELTANO_EXTRACT__LOAD_SCHEMA",
56
- "label": "Default Target Schema",
57
- "description": "Name of the schema where the tables will be created. If schema_mapping is not defined then every stream sent by the tap is loaded into this schema."
43
+ "label": "Database name",
44
+ "description": "Alias of `dbname`."
45
+ },
46
+ {
47
+ "name": "token",
48
+ "kind": "password",
49
+ "label": "Token",
50
+ "description": "For MotherDuck connections, the auth token to use."
58
51
  },
59
52
  {
60
53
  "name": "delimiter",
@@ -64,12 +57,18 @@
64
57
  "description": "The delimiter to use for the CSV files that are used for record imports."
65
58
  },
66
59
  {
67
- "name": "filepath",
60
+ "name": "quotechar",
68
61
  "kind": "string",
69
- "value": "${MELTANO_PROJECT_ROOT}/output/warehouse.duckdb",
70
- "label": "File Path",
71
- "description": "Alias of `path`.",
72
- "placeholder": "/path/to/local/file.duckdb"
62
+ "value": "\"",
63
+ "label": "Quote Character",
64
+ "description": "The quote character to use for the CSV files that are used for record imports."
65
+ },
66
+ {
67
+ "name": "batch_size_rows",
68
+ "kind": "integer",
69
+ "value": 100000,
70
+ "label": "Batch Size Rows",
71
+ "description": "Maximum number of rows in each batch. At the end of each batch, the rows in the batch are loaded into DuckDB."
73
72
  },
74
73
  {
75
74
  "name": "flush_all_streams",
@@ -78,6 +77,26 @@
78
77
  "label": "Flush All Streams",
79
78
  "description": "Flush and load every stream into DuckDB when one batch is full. Warning - This may trigger the COPY command to use files with low number of records."
80
79
  },
80
+ {
81
+ "name": "default_target_schema",
82
+ "kind": "string",
83
+ "value": "$MELTANO_EXTRACT__LOAD_SCHEMA",
84
+ "label": "Default Target Schema",
85
+ "description": "Name of the schema where the tables will be created. If schema_mapping is not defined then every stream sent by the tap is loaded into this schema."
86
+ },
87
+ {
88
+ "name": "schema_mapping",
89
+ "kind": "object",
90
+ "label": "schema_mapping",
91
+ "description": "Useful if you want to load multiple streams from one tap to multiple DuckDB schemas.\n\nIf the tap sends the stream_id in <schema_name>-<table_name> format then this option overwrites the default_target_schema value.\n"
92
+ },
93
+ {
94
+ "name": "add_metadata_columns",
95
+ "kind": "boolean",
96
+ "value": false,
97
+ "label": "Add Metadata Columns",
98
+ "description": "Metadata columns add extra row level information about data ingestions, (i.e. when was the row read in source, when was inserted or deleted in postgres etc.) Metadata columns are creating automatically by adding extra columns to the tables with a column prefix _SDC_. The column names are following the stitch naming conventions documented at https://www.stitchdata.com/docs/data-structure/integration-schemas#sdc-columns. Enabling metadata columns will flag the deleted rows by setting the _SDC_DELETED_AT metadata column. Without the add_metadata_columns option the deleted rows from singer taps will not be recognisable in DuckDB."
99
+ },
81
100
  {
82
101
  "name": "hard_delete",
83
102
  "kind": "boolean",
@@ -86,11 +105,11 @@
86
105
  "description": "When hard_delete option is true then DELETE SQL commands will be performed in DuckDB to delete rows in tables. It's achieved by continuously checking the _SDC_DELETED_AT metadata column sent by the singer tap. Due to deleting rows requires metadata columns, hard_delete option automatically enables the add_metadata_columns option as well."
87
106
  },
88
107
  {
89
- "name": "path",
90
- "kind": "string",
91
- "label": "Connection Path",
92
- "description": "The path to use for the `duckdb.connect` call; either a local file or a MotherDuck connection uri.",
93
- "placeholder": "/path/to/local/file.duckdb"
108
+ "name": "data_flattening_max_level",
109
+ "kind": "integer",
110
+ "value": 0,
111
+ "label": "Data Flattening Max Level",
112
+ "description": "Object type RECORD items from taps can be transformed to flattened columns by creating columns automatically.\n\nWhen value is 0 (default) then flattening functionality is turned off.\n"
94
113
  },
95
114
  {
96
115
  "name": "primary_key_required",
@@ -100,37 +119,17 @@
100
119
  "description": "Log based and Incremental replications on tables with no Primary Key cause duplicates when merging UPDATE events. When set to true, stop loading data if no Primary Key is defined."
101
120
  },
102
121
  {
103
- "name": "quotechar",
104
- "kind": "string",
105
- "value": "\"",
106
- "label": "Quote Character",
107
- "description": "The quote character to use for the CSV files that are used for record imports."
108
- },
109
- {
110
- "name": "schema_mapping",
111
- "kind": "object",
112
- "label": "schema_mapping",
113
- "description": "Useful if you want to load multiple streams from one tap to multiple DuckDB schemas.\n\nIf the tap sends the stream_id in <schema_name>-<table_name> format then this option overwrites the default_target_schema value.\n"
122
+ "name": "validate_records",
123
+ "kind": "boolean",
124
+ "value": false,
125
+ "label": "Validate Records",
126
+ "description": "Validate every single record message to the corresponding JSON schema. This option is disabled by default and invalid RECORD messages will fail only at load time by DuckDB. Enabling this option will detect invalid records earlier but could cause performance degradation."
114
127
  },
115
128
  {
116
129
  "name": "temp_dir",
117
130
  "kind": "string",
118
131
  "label": "Temporary Directory",
119
132
  "description": "Directory of temporary CSV files with RECORD messages."
120
- },
121
- {
122
- "name": "token",
123
- "kind": "string",
124
- "label": "Token",
125
- "description": "For MotherDuck connections, the auth token to use.",
126
- "sensitive": true
127
- },
128
- {
129
- "name": "validate_records",
130
- "kind": "boolean",
131
- "value": false,
132
- "label": "Validate Records",
133
- "description": "Validate every single record message to the corresponding JSON schema. This option is disabled by default and invalid RECORD messages will fail only at load time by DuckDB. Enabling this option will detect invalid records earlier but could cause performance degradation."
134
133
  }
135
134
  ]
136
- }
135
+ }
@@ -31,4 +31,4 @@
31
31
  "description": "Specifies a custom name for the filename, instead of the stream name.\n\nThe file name will be `{custom_name}-{timestamp}.jsonl`, if `do_timestamp_file` is `true`.\nOtherwise the file name will be `{custom_name}.jsonl`.\n\nIf custom name is not provided, the stream name will be used.\n"
32
32
  }
33
33
  ]
34
- }
34
+ }
@@ -1,8 +1,8 @@
1
1
  [build-system]
2
2
  build-backend = "hatchling.build"
3
3
  requires = [
4
- "hatch-vcs==0.4",
5
- "hatchling==1.27",
4
+ "hatch-vcs",
5
+ "hatchling",
6
6
  ]
7
7
 
8
8
  [project]
@@ -17,9 +17,10 @@ keywords = [
17
17
  license = "Apache-2.0"
18
18
  maintainers = [ { name = "Edgar Ramírez-Mondragón", email = "edgarrm358@gmail.com" } ]
19
19
  authors = [ { name = "Edgar Ramírez-Mondragón", email = "edgarrm358@gmail.com" } ]
20
- requires-python = ">=3.9"
20
+ requires-python = ">=3.8"
21
21
  classifiers = [
22
22
  "Programming Language :: Python :: 3 :: Only",
23
+ "Programming Language :: Python :: 3.8",
23
24
  "Programming Language :: Python :: 3.9",
24
25
  "Programming Language :: Python :: 3.10",
25
26
  "Programming Language :: Python :: 3.11",
@@ -30,38 +31,50 @@ dynamic = [
30
31
  "version",
31
32
  ]
32
33
  dependencies = [
33
- "requests~=2.32.3",
34
+ "importlib-resources; python_version<'3.9'",
35
+ "requests",
34
36
  "requests-cache==1.*",
35
- "singer-sdk~=0.45.3",
37
+ "singer-sdk~=0.41.0",
36
38
  ]
37
- urls.Documentation = "https://github.com/edgarrmondragon/tap-belvo#readme"
38
- urls.Homepage = "https://github.com/edgarrmondragon/tap-belvo"
39
- urls.Source = "https://github.com/edgarrmondragon/tap-belvo"
40
- scripts."tap-belvo" = "tap_belvo.tap:TapBelvo.cli"
41
-
42
- [dependency-groups]
43
- dev = [
44
- { include-group = "testing" },
45
- { include-group = "typing" },
46
- ]
47
- testing = [
39
+ optional-dependencies.testing = [
48
40
  "deptry>=0.12",
49
41
  "pytest>=7.4",
50
42
  "singer-sdk[testing]",
51
43
  ]
52
- typing = [
44
+ optional-dependencies.typing = [
53
45
  "mypy",
54
46
  "types-requests",
55
47
  ]
48
+ urls.Documentation = "https://github.com/edgarrmondragon/tap-belvo#readme"
49
+ urls.Homepage = "https://github.com/edgarrmondragon/tap-belvo"
50
+ urls.Source = "https://github.com/edgarrmondragon/tap-belvo"
51
+ scripts."tap-belvo" = "tap_belvo.tap:TapBelvo.cli"
56
52
 
57
53
  [tool.hatch.version]
58
54
  source = "vcs"
59
55
 
56
+ [tool.hatch.envs.sync.scripts]
57
+ console = "tap-belvo {args}"
58
+ jsonl = "tap-belvo {args} > tap-belvo.jsonl"
59
+
60
+ [tool.hatch.envs.test]
61
+ features = [ "testing" ]
62
+ [tool.hatch.envs.test.scripts]
63
+ integration = "pytest {args:tests}"
64
+ dependencies = "deptry ."
65
+
66
+ [tool.hatch.envs.typing]
67
+ features = [ "testing", "typing" ]
68
+ [tool.hatch.envs.typing.scripts]
69
+ check = "mypy --strict {args:tap_belvo tests}"
70
+
60
71
  [tool.ruff]
61
72
  line-length = 88
73
+ src = [ "tap_belvo", "tests" ]
62
74
 
63
75
  lint.select = [ "ALL" ]
64
76
  lint.ignore = [
77
+ "ANN101", # missing-type-self
65
78
  "COM812", # missing-trailing-comma
66
79
  "DJ", # flake8-django
67
80
  "FIX002", # line-contains-todo
@@ -80,31 +93,30 @@ lint.isort.known-first-party = [ "tap_belvo" ]
80
93
  lint.isort.required-imports = [ "from __future__ import annotations" ]
81
94
  lint.pydocstyle.convention = "google"
82
95
 
96
+ [tool.deptry.package_module_name_map]
97
+ importlib-resources = "importlib_resources"
98
+ mypy = "mypy"
99
+ types-requests = "requests"
100
+
101
+ [tool.deptry.per_rule_ignores]
102
+ DEP002 = [
103
+ "deptry",
104
+ "mypy",
105
+ "pytest",
106
+ ]
107
+
83
108
  [tool.pyproject-fmt]
84
109
  max_supported_python = "3.13"
85
110
 
86
111
  [tool.pytest.ini_options]
87
- addopts = [ "-vvv" ]
88
- filterwarnings = [ "error" ]
112
+ addopts = "-vvv"
89
113
 
90
114
  [tool.mypy]
91
- enable_error_code = [
92
- "ignore-without-code",
93
- "redundant-expr",
94
- "truthy-bool",
95
- ]
115
+ python_version = "3.12"
96
116
  warn_redundant_casts = true
97
- warn_return_any = true
98
- warn_no_return = true
99
- warn_unreachable = true
100
117
  warn_unused_configs = true
101
118
  warn_unused_ignores = true
102
119
 
103
120
  [[tool.mypy.overrides]]
104
121
  ignore_missing_imports = true
105
122
  module = [ "backoff.*" ]
106
-
107
- [tool.uv]
108
- prerelease = "allow"
109
- preview = true
110
- required-version = ">=0.5.19"
@@ -10,9 +10,9 @@ from urllib.parse import ParseResult, parse_qsl
10
10
  from requests.auth import HTTPBasicAuth
11
11
  from requests_cache import install_cache
12
12
  from singer_sdk import RESTStream
13
+ from singer_sdk._singerlib import resolve_schema_references
13
14
  from singer_sdk.helpers._typing import is_date_or_datetime_type
14
15
  from singer_sdk.pagination import BaseHATEOASPaginator
15
- from singer_sdk.singerlib import resolve_schema_references
16
16
 
17
17
  from tap_belvo.openapi import load_openapi
18
18