Skip to content

Commit d3a9abb

Browse files
🐛 Source Jira: returns config_error after low-code migration without reset (#39558)
Co-authored-by: darynaishchenko <[email protected]>
1 parent 1961fe4 commit d3a9abb

File tree

10 files changed

+392
-220
lines changed

10 files changed

+392
-220
lines changed

airbyte-integrations/connectors/source-jira/metadata.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ data:
1010
connectorSubtype: api
1111
connectorType: source
1212
definitionId: 68e63de2-bb83-4c7e-93fa-a8a9051e3993
13-
dockerImageTag: 3.0.14
13+
dockerImageTag: 3.1.0
1414
dockerRepository: airbyte/source-jira
1515
documentationUrl: https://docs.airbyte.com/integrations/sources/jira
1616
githubIssueLabel: source-jira

airbyte-integrations/connectors/source-jira/poetry.lock

+138-66
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

airbyte-integrations/connectors/source-jira/pyproject.toml

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ requires = [ "poetry-core>=1.0.0",]
33
build-backend = "poetry.core.masonry.api"
44

55
[tool.poetry]
6-
version = "3.0.14"
6+
version = "3.1.0"
77
name = "source-jira"
88
description = "Source implementation for Jira."
99
authors = [ "Airbyte <[email protected]>",]
@@ -16,8 +16,8 @@ repository = "https://github.com/airbytehq/airbyte"
1616
include = "source_jira"
1717

1818
[tool.poetry.dependencies]
19-
python = "^3.9,<3.12"
20-
airbyte-cdk = "0.90.0"
19+
python = "^3.10,<3.12"
20+
airbyte-cdk = "^4"
2121

2222
[tool.poetry.scripts]
2323
source-jira = "source_jira.run:run"

airbyte-integrations/connectors/source-jira/source_jira/manifest.yaml

+44-34
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ definitions:
3838
type: DpathExtractor
3939
field_path: ["{{ parameters.extract_field }}"]
4040

41+
selector_base:
42+
type: RecordSelector
43+
extractor:
44+
type: DpathExtractor
45+
field_path: []
46+
4147
# Paginator
4248

4349
no_pagination_paginator:
@@ -110,10 +116,11 @@ definitions:
110116
$ref: "#/definitions/full_refresh_stream"
111117
name: application_roles
112118
primary_key: "key"
113-
retriever: "#/definitions/retriever_no_pagination"
119+
retriever:
120+
$ref: "#/definitions/retriever_no_pagination"
121+
record_selector: "#/definitions/selector_base"
114122
$parameters:
115123
path: "applicationrole"
116-
extract_field: "*"
117124

118125
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-avatars/#api-rest-api-3-avatar-type-system-get
119126
avatars_stream:
@@ -195,10 +202,11 @@ definitions:
195202
$ref: "#/definitions/full_refresh_stream"
196203
name: issue_fields
197204
primary_key: "id"
198-
retriever: "#/definitions/retriever_no_pagination_use_cache"
205+
retriever:
206+
$ref: "#/definitions/retriever_no_pagination_use_cache"
207+
record_selector: "#/definitions/selector_base"
199208
$parameters:
200209
path: "field"
201-
extract_field: "*"
202210

203211
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-field-configurations/#api-rest-api-3-fieldconfiguration-get
204212
issue_field_configurations_stream:
@@ -222,11 +230,12 @@ definitions:
222230
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-navigator-settings/#api-rest-api-3-settings-columns-get
223231
issue_navigator_settings_stream:
224232
$ref: "#/definitions/full_refresh_stream"
225-
retriever: "#/definitions/retriever_no_pagination"
233+
retriever:
234+
$ref: "#/definitions/retriever_no_pagination"
235+
record_selector: "#/definitions/selector_base"
226236
name: issue_navigator_settings
227237
$parameters:
228238
path: "settings/columns"
229-
extract_field: "*"
230239

231240
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-notification-schemes/#api-rest-api-3-notificationscheme-get
232241
issue_notification_schemes_stream:
@@ -268,12 +277,13 @@ definitions:
268277
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-types/#api-group-issue-types
269278
issue_types_stream:
270279
$ref: "#/definitions/full_refresh_stream"
271-
retriever: "#/definitions/retriever_no_pagination"
280+
retriever:
281+
$ref: "#/definitions/retriever_no_pagination"
282+
record_selector: "#/definitions/selector_base"
272283
name: issue_types
273284
primary_key: "id"
274285
$parameters:
275286
path: "issuetype"
276-
extract_field: "*"
277287

278288
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-type-schemes/#api-rest-api-3-issuetypescheme-get
279289
issue_type_schemes_stream:
@@ -296,12 +306,13 @@ definitions:
296306
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-jira-settings/#api-rest-api-3-application-properties-get
297307
jira_settings_stream:
298308
$ref: "#/definitions/full_refresh_stream"
299-
retriever: "#/definitions/retriever_no_pagination"
309+
retriever:
310+
$ref: "#/definitions/retriever_no_pagination"
311+
record_selector: "#/definitions/selector_base"
300312
name: jira_settings
301313
primary_key: "id"
302314
$parameters:
303315
path: "application-properties"
304-
extract_field: "*"
305316

306317
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-labels/#api-rest-api-3-label-get
307318
labels_stream:
@@ -318,7 +329,6 @@ definitions:
318329
primary_key: "label"
319330
$parameters:
320331
path: "label"
321-
extract_field: "*"
322332

323333
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-permissions/#api-rest-api-3-permissions-get
324334
permissions_stream:
@@ -336,7 +346,6 @@ definitions:
336346
primary_key: "key"
337347
$parameters:
338348
path: "permissions"
339-
extract_field: "*"
340349

341350
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-permission-schemes/#api-rest-api-3-permissionscheme-get
342351
permission_schemes_stream:
@@ -387,6 +396,7 @@ definitions:
387396
$ref: "#/definitions/full_refresh_stream"
388397
retriever:
389398
$ref: "#/definitions/retriever_no_pagination"
399+
record_selector: "#/definitions/selector_base"
390400
requester:
391401
$ref: "#/definitions/requester"
392402
error_handler:
@@ -398,26 +408,27 @@ definitions:
398408
primary_key: "id"
399409
$parameters:
400410
path: "projectCategory"
401-
extract_field: "*"
402411

403412
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-roles#api-rest-api-3-role-get
404413
project_roles_stream:
405414
$ref: "#/definitions/full_refresh_stream"
406-
retriever: "#/definitions/retriever_no_pagination"
415+
retriever:
416+
$ref: "#/definitions/retriever_no_pagination"
417+
record_selector: "#/definitions/selector_base"
407418
name: project_roles
408419
primary_key: "id"
409420
$parameters:
410421
path: "role"
411-
extract_field: "*"
412422

413423
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-types/#api-rest-api-3-project-type-get
414424
project_types_stream:
415425
$ref: "#/definitions/full_refresh_stream"
416-
retriever: "#/definitions/retriever_no_pagination"
426+
retriever:
427+
$ref: "#/definitions/retriever_no_pagination"
428+
record_selector: "#/definitions/selector_base"
417429
name: project_types
418430
$parameters:
419431
path: "project/type"
420-
extract_field: "*"
421432

422433
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screens/#api-rest-api-3-screens-get
423434
screens_stream:
@@ -441,12 +452,13 @@ definitions:
441452
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-time-tracking/#api-rest-api-3-configuration-timetracking-list-get
442453
time_tracking_stream:
443454
$ref: "#/definitions/full_refresh_stream"
444-
retriever: "#/definitions/retriever_no_pagination"
455+
retriever:
456+
$ref: "#/definitions/retriever_no_pagination"
457+
record_selector: "#/definitions/selector_base"
445458
name: time_tracking
446459
primary_key: "key"
447460
$parameters:
448461
path: "configuration/timetracking/list"
449-
extract_field: "*"
450462

451463
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-users/#api-rest-api-3-users-search-get
452464
users_stream:
@@ -460,9 +472,9 @@ definitions:
460472
pagination_strategy:
461473
type: OffsetIncrement
462474
page_size: 50
475+
record_selector: "#/definitions/selector_base"
463476
$parameters:
464477
path: "users/search"
465-
extract_field: "*"
466478

467479
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflows/#api-rest-api-3-workflow-search-get
468480
workflows_stream:
@@ -494,22 +506,24 @@ definitions:
494506
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-statuses/#api-rest-api-3-status-get
495507
workflow_statuses_stream:
496508
$ref: "#/definitions/full_refresh_stream"
497-
retriever: "#/definitions/retriever_no_pagination"
509+
retriever:
510+
$ref: "#/definitions/retriever_no_pagination"
511+
record_selector: "#/definitions/selector_base"
498512
name: workflow_statuses
499513
primary_key: "id"
500514
$parameters:
501515
path: "status"
502-
extract_field: "*"
503516

504517
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-status-categories/#api-rest-api-3-statuscategory-get
505518
workflow_status_categories_stream:
506519
$ref: "#/definitions/full_refresh_stream"
507-
retriever: "#/definitions/retriever_no_pagination"
520+
retriever:
521+
$ref: "#/definitions/retriever_no_pagination"
522+
record_selector: "#/definitions/selector_base"
508523
name: workflow_status_categories
509524
primary_key: "id"
510525
$parameters:
511526
path: "statuscategory"
512-
extract_field: "*"
513527

514528
# Substream Based Fullrefresh Streams
515529

@@ -520,6 +534,7 @@ definitions:
520534
primary_key: "id"
521535
retriever:
522536
$ref: "#/definitions/retriever_no_pagination"
537+
record_selector: "#/definitions/selector_base"
523538
partition_router:
524539
type: SubstreamPartitionRouter
525540
parent_stream_configs:
@@ -535,15 +550,14 @@ definitions:
535550
value: "{{ stream_slice.filter_id }}"
536551
$parameters:
537552
path: "filter/{{ stream_slice.filter_id }}/permission"
538-
extract_field: "*"
539553

540554
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-fields/#api-rest-api-3-field-get
541555
__custom_issue_fields_substream:
542556
$ref: "#/definitions/issue_fields_stream"
543557
retriever:
544558
$ref: "#/definitions/retriever_no_pagination_use_cache"
545559
record_selector:
546-
$ref: "#/definitions/selector"
560+
$ref: "#/definitions/selector_base"
547561
record_filter:
548562
condition: "{{ record.get('custom', False) }}"
549563

@@ -678,7 +692,6 @@ definitions:
678692
value: "{{ stream_slice.parent_slice.issue_property_key }}"
679693
$parameters:
680694
path: "issue/{{ stream_slice.parent_slice.issue_property_key }}/properties/{{ stream_slice.property_key }}"
681-
extract_field: "*"
682695

683696
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-remote-links/#api-rest-api-3-issue-issueidorkey-remotelink-get
684697
issue_remote_links_stream:
@@ -687,6 +700,7 @@ definitions:
687700
primary_key: "id"
688701
retriever:
689702
$ref: "#/definitions/retriever_no_pagination"
703+
record_selector: "#/definitions/selector_base"
690704
partition_router:
691705
type: SubstreamPartitionRouter
692706
parent_stream_configs:
@@ -702,7 +716,6 @@ definitions:
702716
value: "{{ stream_slice.issue_property_key }}"
703717
$parameters:
704718
path: "issue/{{ stream_slice.issue_property_key }}/remotelink"
705-
extract_field: "*"
706719

707720
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/#api-rest-api-3-issue-issueidorkey-transitions-get
708721
issue_transitions_stream:
@@ -756,7 +769,6 @@ definitions:
756769
value: "{{ stream_slice.issue_property_key }}"
757770
$parameters:
758771
path: "issue/{{ stream_slice.issue_property_key }}/votes"
759-
extract_field: "*"
760772

761773
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-watchers/#api-rest-api-3-issue-issueidorkey-watchers-get
762774
issue_watchers_stream:
@@ -791,7 +803,6 @@ definitions:
791803
value: "{{ stream_slice.issue_property_key }}"
792804
$parameters:
793805
path: "issue/{{ stream_slice.issue_property_key }}/watchers"
794-
extract_field: "*"
795806

796807
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-avatars/#api-rest-api-3-project-projectidorkey-avatars-get
797808
project_avatars_stream:
@@ -932,6 +943,7 @@ definitions:
932943
primary_key: "id"
933944
retriever:
934945
$ref: "#/definitions/retriever_no_pagination_use_cache"
946+
record_selector: "#/definitions/selector_base"
935947
partition_router:
936948
type: SubstreamPartitionRouter
937949
parent_stream_configs:
@@ -956,7 +968,6 @@ definitions:
956968
value: "{{ stream_slice.screen_id }}"
957969
$parameters:
958970
path: "screens/{{ stream_slice.screen_id }}/tabs"
959-
extract_field: "*"
960971

961972
# https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-tab-fields/#api-rest-api-3-screens-screenid-tabs-tabid-fields-get
962973
screen_tab_fields_stream:
@@ -965,6 +976,7 @@ definitions:
965976
primary_key: "id"
966977
retriever:
967978
$ref: "#/definitions/retriever_no_pagination"
979+
record_selector: "#/definitions/selector_base"
968980
partition_router:
969981
type: SubstreamPartitionRouter
970982
parent_stream_configs:
@@ -983,7 +995,6 @@ definitions:
983995
value: "{{ stream_slice.parent_slice.screen_id }}"
984996
$parameters:
985997
path: "screens/{{ stream_slice.parent_slice.screen_id }}/tabs/{{ stream_slice.tab_id }}/fields"
986-
extract_field: "*"
987998

988999
__boards_substream:
9891000
$ref: "#/definitions/boards_stream"
@@ -1057,7 +1068,6 @@ definitions:
10571068
field_path: []
10581069
$parameters:
10591070
path: "user"
1060-
extract_field: "*"
10611071

10621072
# Incremental Streams
10631073

@@ -1185,7 +1195,7 @@ definitions:
11851195
retriever:
11861196
$ref: "#/definitions/retriever_no_pagination_use_cache"
11871197
record_selector:
1188-
$ref: "#/definitions/selector"
1198+
$ref: "#/definitions/selector_base"
11891199
record_filter:
11901200
condition: "{{ record.name in ['Story Points', 'Story point estimate'] }}"
11911201

airbyte-integrations/connectors/source-jira/source_jira/source.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from airbyte_cdk.sources.streams.core import Stream
1212
from airbyte_cdk.sources.streams.http.requests_native_auth import BasicHttpAuthenticator
1313
from airbyte_cdk.utils.traced_exception import AirbyteTracedException
14-
from pydantic.error_wrappers import ValidationError
14+
from pydantic import ValidationError
1515
from requests.exceptions import InvalidURL
1616

1717
from .streams import IssueComments, IssueFields, Issues, IssueWorklogs, PullRequests
@@ -47,8 +47,8 @@ def check_connection(self, logger: Logger, config: Mapping[str, Any]) -> Tuple[b
4747
return False, "This API Token does not have permission to read any of the resources."
4848
except ValidationError as e:
4949
return False, e
50-
except (ReadException, InvalidURL) as e:
51-
if isinstance(e, InvalidURL) or "404" in str(e):
50+
except (AirbyteTracedException, ReadException, InvalidURL) as e:
51+
if isinstance(e, InvalidURL) or "404" in str(e) or (isinstance(e, AirbyteTracedException) and "Not found" in e.message):
5252
raise AirbyteTracedException(
5353
message="Config validation error: please check that your domain is valid and does not include protocol (e.g: https://).",
5454
internal_message=str(e),

0 commit comments

Comments
 (0)