From c5cb13189590917f7bbf9cacd9b4b14349baa487 Mon Sep 17 00:00:00 2001 From: Derek Visch Date: Sat, 8 Jan 2022 11:48:42 -0500 Subject: [PATCH 1/3] Refs were not working in Json Schema, added a ref resolver, updated the old broken ref schemas, and added a tool for resolving the refs --- README.md | 7 ++ meltano.yml | 23 +++- schema-parser/README.md | 7 ++ schema-parser/requirements.txt | 11 ++ schema-parser/resolver.py | 18 +++ tap_clickup/client.py | 12 ++ tap_clickup/schemas/custom_field.json | 2 +- tap_clickup/schemas/folder.json | 61 ++++++++-- tap_clickup/schemas/list.json | 16 +-- tap_clickup/schemas/shared.json | 16 +-- tap_clickup/schemas/space.json | 160 +++++++++++++++----------- tap_clickup/schemas/task.json | 8 +- tap_clickup/schemas/team.json | 151 +++++++++++++++++------- 13 files changed, 347 insertions(+), 145 deletions(-) create mode 100644 schema-parser/README.md create mode 100644 schema-parser/requirements.txt create mode 100644 schema-parser/resolver.py diff --git a/README.md b/README.md index 8c0004c..453b3fa 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,13 @@ tap-clickup --config CONFIG --discover > ./catalog.json ## Developer Resources +### Schema Debugging +We are waiting on https://gitlab.com/meltano/sdk/-/issues/299 to get fixed as we make usage of refs in our json schema. Until then we parse the schemas in client.py + +Sometimes it's useful to debug how the refs are being resolved. To do that there's a script inside of ./schema-parser , README in that directory describes how to run the parser + +Not worry about making this super fool proof as we expect the SDK to release some kind of fix for this + ### Initialize your Development Environment ```bash diff --git a/meltano.yml b/meltano.yml index 7d08a71..50622fe 100644 --- a/meltano.yml +++ b/meltano.yml @@ -13,6 +13,7 @@ plugins: - name: api_token kind: password select: + - '!shared_hierarchy.*' - '*.*' loaders: - name: target-jsonl @@ -33,11 +34,25 @@ plugins: pip_url: target-stitch executable: target-stitch settings: - - name: token - kind: password + - name: token + kind: password config: client_id: 191229 small_batch_url: https://api.stitchdata.com/v2/import/batch big_batch_url: https://api.stitchdata.com/v2/import/batch - batch_size_preferences: - a : "a" + batch_size_preferences: + a: a + - name: target-snowflake + variant: transferwise + pip_url: pipelinewise-target-snowflake + config: + account: yja98422 + database: test + user: tap_clickup + warehouse: COMPUTE_WH + s3_bucket: snowflake-clickup-testing + stage: tap_clickup.tap_clickup + file_format: tap_clickup.tap_clickup + s3_region_name: us-west-2 + default_target_schema: tap_clickup + primary_key_required: False diff --git a/schema-parser/README.md b/schema-parser/README.md new file mode 100644 index 0000000..6b31fa9 --- /dev/null +++ b/schema-parser/README.md @@ -0,0 +1,7 @@ +To run the schema parser +1. python -m venv .venv +1. source .venv/bin/activate +1. pip install -r requirements.txt +1. python resolver.py + +Data will land in ./parsed_schemas diff --git a/schema-parser/requirements.txt b/schema-parser/requirements.txt new file mode 100644 index 0000000..c2b3a9c --- /dev/null +++ b/schema-parser/requirements.txt @@ -0,0 +1,11 @@ +attrs==21.4.0 +backoff==1.11.1 +ciso8601==2.2.0 +jsonschema==3.2.0 +orjson==3.6.1 +pipelinewise-singer-python==2.0.1 +pkg_resources==0.0.0 +pyrsistent==0.18.0 +python-dateutil==2.8.2 +pytz==2021.3 +six==1.16.0 diff --git a/schema-parser/resolver.py b/schema-parser/resolver.py new file mode 100644 index 0000000..7df1f68 --- /dev/null +++ b/schema-parser/resolver.py @@ -0,0 +1,18 @@ +import singer +import json +import os + +#list of files to transform +file_names = [] +for file in os.listdir("."): + if file.endswith(".json"): + file_names.append(file) + +for schema_file in file_names: + with open(schema_file) as f: + old_schema = json.load(f) + new_schema = singer.resolve_schema_references(old_schema) + with open(f"./parsed_schemas/{schema_file}", "w") as w: + w.write(json.dumps(new_schema, indent=4)) + + diff --git a/tap_clickup/client.py b/tap_clickup/client.py index b42908f..42d20c2 100644 --- a/tap_clickup/client.py +++ b/tap_clickup/client.py @@ -6,6 +6,7 @@ import time import requests import backoff +import singer from requests.exceptions import RequestException from singer_sdk.helpers.jsonpath import extract_jsonpath from singer_sdk.streams import RESTStream @@ -20,6 +21,17 @@ class ClickUpStream(RESTStream): records_jsonpath = "$[*]" # Or override `parse_response`. next_page_token_jsonpath = "$.next_page" # Or override `get_next_page_token`. + @property + def schema(self) -> dict: + """Get schema. + + We are waiting on https://gitlab.com/meltano/sdk/-/issues/299 this works + well until then + Returns: + JSON Schema dictionary for this stream. + """ + return singer.resolve_schema_references(self._schema) + def get_url_params( self, context: Optional[dict], next_page_token: Optional[Any] ) -> Dict[str, Any]: diff --git a/tap_clickup/schemas/custom_field.json b/tap_clickup/schemas/custom_field.json index 276f8f7..cc92ada 100644 --- a/tap_clickup/schemas/custom_field.json +++ b/tap_clickup/schemas/custom_field.json @@ -40,7 +40,7 @@ "type": ["null", "string"] }, "orderindex": { - "type": ["null", "integer"] + "type": ["null", "integer", "string"] }, "label": { "type": ["null", "string"] diff --git a/tap_clickup/schemas/folder.json b/tap_clickup/schemas/folder.json index 71680a9..7b0c796 100644 --- a/tap_clickup/schemas/folder.json +++ b/tap_clickup/schemas/folder.json @@ -1,7 +1,7 @@ { "definitions": { "status": { - "type": "object", + "type": ["object", "null"], "properties": { "id": { "type": "string" @@ -10,7 +10,7 @@ "type": "string" }, "orderindex": { - "type": ["null", "string"] + "type": ["null", "integer", "string"] }, "color": { "type": ["null", "string"] @@ -18,10 +18,42 @@ "type": { "type": ["null", "string"] } + }, + "feature": { + "type": ["object", "null"], + "properties": { + "enabled": { + "type": ["boolean"] + }, + "start_date": { + "type": ["null", "boolean"] + }, + "remap_due_dates": { + "type": ["null", "boolean"] + }, + "remap_closed_due_date": { + "type": ["null", "boolean"] + }, + "harvest": { + "type": ["null", "boolean"] + }, + "rollup": { + "type": ["null", "boolean"] + }, + "per_assignee": { + "type": ["null", "boolean"] + }, + "subtasks": { + "type": ["null", "boolean"] + }, + "checklists": { + "type": ["null", "boolean"] + } } + } }, "list": { - "type": "object", + "type": ["object", "null"], "properties": { "id": { "type": ["string"] @@ -30,7 +62,7 @@ "type": ["null", "string"] }, "orderindex": { - "type": ["null", "integer"] + "type": ["null", "integer", "string"] }, "status": { "type": ["null", "string"] @@ -51,21 +83,26 @@ "type": ["null", "string"] }, "space": { - "type": ["null", "object"], + "type": "object", "properties": { - "$ref": "#definitions/feature" + "id": { + "type": ["null", "string"] + }, + "name": { + "type": ["null", "string"] + } } }, "archived": { "type": ["null", "boolean"] }, "override_statuses": { - "type": ["null", "string"] + "type": ["null", "boolean", "string"] }, "statuses": { "type": ["array","null"], "items": { - "$ref": "#definitions/status" + "$ref": "#/definitions/status" } }, "permission_level": { @@ -83,10 +120,10 @@ "type": ["null", "string"] }, "orderindex": { - "type": ["null", "integer"] + "type": ["null", "string", "integer"] }, "override_statuses": { - "type": ["null", "boolean"] + "type": ["null", "string", "boolean"] }, "hidden": { "type": ["null", "boolean"] @@ -108,13 +145,13 @@ "statuses": { "type": ["array", "null"], "items": { - "$ref": "#definitions/status" + "$ref": "#/definitions/status" } }, "lists": { "type": ["array", "null"], "items": { - "$ref": "#definitions/list" + "$ref": "#/definitions/list" } }, "archived": { diff --git a/tap_clickup/schemas/list.json b/tap_clickup/schemas/list.json index b320bfd..3367d1c 100644 --- a/tap_clickup/schemas/list.json +++ b/tap_clickup/schemas/list.json @@ -1,7 +1,7 @@ { "definitions": { "folder": { - "type": "object", + "type": ["object", "null"], "properties": { "id": { "type": "string" @@ -18,7 +18,7 @@ } }, "status": { - "type": "object", + "type": ["object", "null"], "properties": { "id": { "type": "string" @@ -27,7 +27,7 @@ "type": "string" }, "orderindex": { - "type": ["null", "string"] + "type": ["null", "string", "intger"] }, "color": { "type": ["null", "string"] @@ -47,13 +47,13 @@ "type": ["null", "string"] }, "orderindex": { - "type": ["null", "integer"] + "type": ["null", "integer", "string"] }, "content": { "type": ["null", "string"] }, "status": { - "$ref": "#definitions/status" + "$ref": "#/definitions/status" }, "priority": { "type": ["string", "object", "null"], @@ -65,7 +65,7 @@ "type": ["string"] }, "orderindex":{ - "type": ["string"] + "type": ["string", "null", "integer"] }, "priority":{ "type": ["string"] @@ -105,7 +105,7 @@ "type": ["null", "string"] }, "folder": { - "$ref": "#definitions/folder" + "$ref": "#/definitions/folder" }, "space": { "type": ["null", "object"], @@ -125,7 +125,7 @@ "type": ["null", "boolean"] }, "override_statuses": { - "type": ["null", "boolean"] + "type": ["null", "string", "boolean"] }, "permission_level": { "type": ["null", "string"] diff --git a/tap_clickup/schemas/shared.json b/tap_clickup/schemas/shared.json index c5f4095..d31ffb7 100644 --- a/tap_clickup/schemas/shared.json +++ b/tap_clickup/schemas/shared.json @@ -10,7 +10,7 @@ "type": "string" }, "orderindex": { - "type": ["null", "string"] + "type": ["null", "string", "integer"] }, "color": { "type": ["null", "string"] @@ -35,18 +35,18 @@ "type": ["string", "null"] }, "orderindex": { - "type": ["integer", "null"] + "type": ["integer", "string", "null"] }, "content": { "type": ["string", "null"] }, "status": { - "$ref": "#definitions/status" + "$ref": "#/definitions/status" }, "statuses": { "type": ["array", "null"], "items": { - "$ref": "#definitions/status" + "$ref": "#/definitions/status" } }, "priority": { @@ -82,18 +82,18 @@ "type": ["string", "null"] }, "orderindex": { - "type": ["integer", "null"] + "type": ["integer", "string", "null"] }, "content": { "type": ["string", "null"] }, "status": { - "$ref": "#definitions/status" + "$ref": "#/definitions/status" }, "statuses": { "type": ["array", "null"], "items": { - "$ref": "#definitions/status" + "$ref": "#/definitions/status" } }, "priority": { @@ -129,7 +129,7 @@ "type": ["string", "null"] }, "orderindex": { - "type": ["integer", "null"] + "type": ["integer", "string", "null"] }, "content": { "type": ["string", "null"] diff --git a/tap_clickup/schemas/space.json b/tap_clickup/schemas/space.json index ad80d55..a887c4e 100644 --- a/tap_clickup/schemas/space.json +++ b/tap_clickup/schemas/space.json @@ -1,61 +1,88 @@ { "definitions": { - "user": { - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "username": { - "type": "string" - }, - "email": { - "type": ["null", "string"] - }, - "color": { - "type": ["null", "string"] - }, - "profilePicture": { - "type": ["null", "string"] - }, - "initials": { - "type": ["null", "string"] - }, - "role": { - "type": ["null", "integer"] - }, - "custom_role": { - "type": ["null", "integer"] - }, - "last_active": { - "type": ["null", "string"] - }, - "date_joined": { - "type": ["null", "string"] - }, - "date_invited": { - "type": ["null", "string"] - } - } - }, "members": { - "type": ["array", "null"], - "items": [ - { + "type": ["null", "object"], + "properties": { + "user": { "type": "object", "properties": { - "user": { - "$ref": "#/definitions/user" + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "email": { + "type": ["null", "string"] + }, + "color": { + "type": ["null", "string"] + }, + "profilePicture": { + "type": ["null", "string"] + }, + "initials": { + "type": ["null", "string"] + }, + "role": { + "type": ["null", "integer"] + }, + "custom_role": { + "type": ["null", "integer"] + }, + "last_active": { + "type": ["null", "string"] + }, + "date_joined": { + "type": ["null", "string"] + }, + "date_invited": { + "type": ["null", "string"] + } + } + }, + "invited_by": { + "type": ["object", "null"], + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" }, - "invited_by": { - "$ref": "#/definitions/user" + "email": { + "type": ["null", "string"] + }, + "color": { + "type": ["null", "string"] + }, + "profilePicture": { + "type": ["null", "string"] + }, + "initials": { + "type": ["null", "string"] + }, + "role": { + "type": ["null", "integer"] + }, + "custom_role": { + "type": ["null", "integer"] + }, + "last_active": { + "type": ["null", "string"] + }, + "date_joined": { + "type": ["null", "string"] + }, + "date_invited": { + "type": ["null", "string"] } } - } - ] + } + } }, "status": { - "type": "object", + "type": ["object", "null"], "properties": { "id": { "type": "string" @@ -64,7 +91,7 @@ "type": "string" }, "orderindex": { - "type": ["null", "string"] + "type": ["null", "integer", "string"] }, "color": { "type": ["null", "string"] @@ -72,7 +99,7 @@ } }, "feature": { - "type": "object", + "type": ["object", "null"], "properties": { "enabled": { "type": ["boolean"] @@ -121,11 +148,14 @@ "statuses": { "type": ["array", "null"], "items": { - "$ref": "#definitions/status" + "$ref": "#/definitions/status" } }, "members": { - "$ref": "#definitions/status" + "type": "array", + "items": { + "$ref": "#definitions/members" + } }, "multiple_assignees": { "type": ["null", "boolean"] @@ -134,43 +164,43 @@ "type": "object", "properties": { "due_dates": { - "$ref": "#definitions/feature" + "$ref": "#/definitions/feature" }, "sprints": { - "$ref": "#definitions/feature" + "$ref": "#/definitions/feature" }, "time_tracking": { - "$ref": "#definitions/feature" + "$ref": "#/definitions/feature" }, "points": { - "$ref": "#definitions/feature" + "$ref": "#/definitions/feature" }, "custom_items": { - "$ref": "#definitions/feature" + "$ref": "#/definitions/feature" }, "time_estimates": { - "$ref": "#definitions/feature" + "$ref": "#/definitions/feature" }, "check_unresolved": { - "$ref": "#definitions/feature" + "$ref": "#/definitions/feature" }, "zoom": { - "$ref": "#definitions/feature" + "$ref": "#/definitions/feature" }, "milestones": { - "$ref": "#definitions/feature" + "$ref": "#/definitions/feature" }, "remap_dependencies": { - "$ref": "#definitions/feature" + "$ref": "#/definitions/feature" }, "dependency_warning": { - "$ref": "#definitions/feature" + "$ref": "#/definitions/feature" }, "multiple_assignees": { - "$ref": "#definitions/feature" + "$ref": "#/definitions/feature" }, "emails": { - "$ref": "#definitions/feature" + "$ref": "#/definitions/feature" } } }, diff --git a/tap_clickup/schemas/task.json b/tap_clickup/schemas/task.json index d98e249..5cc2489 100644 --- a/tap_clickup/schemas/task.json +++ b/tap_clickup/schemas/task.json @@ -20,7 +20,7 @@ "type": ["string"] }, "orderindex":{ - "type": ["string"] + "type": ["string", "null", "integer"] }, "priority":{ "type": ["string"] @@ -55,12 +55,12 @@ "type": ["string", "null"] }, "orderindex": { - "type": ["integer", "null"] + "type": ["string", "integer", "null"] } } }, "orderindex": { - "type": ["string", "null"] + "type": ["string", "integer", "null"] }, "date_created": { "type": ["string", "null"] @@ -203,7 +203,7 @@ "type": ["string", "null"] }, "orderindex": { - "type": ["integer", "null"] + "type": ["integer", "string", "null"] } } } diff --git a/tap_clickup/schemas/team.json b/tap_clickup/schemas/team.json index 8ab7d02..7ba04a8 100644 --- a/tap_clickup/schemas/team.json +++ b/tap_clickup/schemas/team.json @@ -1,58 +1,123 @@ { "definitions": { "user": { - "type": "object", + "type": ["object", "null"], "properties": { - "id": { - "type": "integer" - }, - "username": { - "type": "string" - }, - "email": { - "type": ["null", "string"] - }, - "color": { - "type": ["null", "string"] - }, - "profilePicture": { - "type": ["null", "string"] - }, - "initials": { - "type": ["null", "string"] - }, - "role": { - "type": ["null", "integer"] - }, - "custom_role": { - "type": ["null", "integer"] - }, - "last_active": { - "type": ["null", "string"] - }, - "date_joined": { - "type": ["null", "string"] - }, - "date_invited": { - "type": ["null", "string"] - } + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "email": { + "type": ["null", "string"] + }, + "color": { + "type": ["null", "string"] + }, + "profilePicture": { + "type": ["null", "string"] + }, + "initials": { + "type": ["null", "string"] + }, + "role": { + "type": ["null", "integer"] + }, + "custom_role": { + "type": ["null", "integer"] + }, + "last_active": { + "type": ["null", "string"] + }, + "date_joined": { + "type": ["null", "string"] + }, + "date_invited": { + "type": ["null", "string"] + } } }, "members": { - "type": "array", - "items": [ - { + "type": "object", + "properties": { + "user": { "type": "object", "properties": { - "user": { - "$ref": "#/definitions/user" + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "email": { + "type": ["null", "string"] + }, + "color": { + "type": ["null", "string"] }, - "invited_by": { - "$ref": "#/definitions/user" + "profilePicture": { + "type": ["null", "string"] + }, + "initials": { + "type": ["null", "string"] + }, + "role": { + "type": ["null", "integer"] + }, + "custom_role": { + "type": ["null", "integer"] + }, + "last_active": { + "type": ["null", "string"] + }, + "date_joined": { + "type": ["null", "string"] + }, + "date_invited": { + "type": ["null", "string"] } } - } - ] + }, + "invited_by": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "email": { + "type": ["null", "string"] + }, + "color": { + "type": ["null", "string"] + }, + "profilePicture": { + "type": ["null", "string"] + }, + "initials": { + "type": ["null", "string"] + }, + "role": { + "type": ["null", "integer"] + }, + "custom_role": { + "type": ["null", "integer"] + }, + "last_active": { + "type": ["null", "string"] + }, + "date_joined": { + "type": ["null", "string"] + }, + "date_invited": { + "type": ["null", "string"] + } + } + } + } } }, "type": "object", From f08b11b9da73b43d1fc3567f836574873a3d50c9 Mon Sep 17 00:00:00 2001 From: Derek Visch Date: Sat, 8 Jan 2022 12:08:01 -0500 Subject: [PATCH 2/3] Added nulls to be as safe as possible in the definitions --- tap_clickup/schemas/folder.json | 42 ++++----------------------------- tap_clickup/schemas/list.json | 6 ++--- tap_clickup/schemas/shared.json | 4 ++-- tap_clickup/schemas/space.json | 14 +++++------ tap_clickup/schemas/team.json | 18 +++++++------- 5 files changed, 26 insertions(+), 58 deletions(-) diff --git a/tap_clickup/schemas/folder.json b/tap_clickup/schemas/folder.json index 7b0c796..60af331 100644 --- a/tap_clickup/schemas/folder.json +++ b/tap_clickup/schemas/folder.json @@ -4,10 +4,10 @@ "type": ["object", "null"], "properties": { "id": { - "type": "string" + "type": ["null", "string"] }, "status": { - "type": "string" + "type": ["null", "string"] }, "orderindex": { "type": ["null", "integer", "string"] @@ -18,45 +18,13 @@ "type": { "type": ["null", "string"] } - }, - "feature": { - "type": ["object", "null"], - "properties": { - "enabled": { - "type": ["boolean"] - }, - "start_date": { - "type": ["null", "boolean"] - }, - "remap_due_dates": { - "type": ["null", "boolean"] - }, - "remap_closed_due_date": { - "type": ["null", "boolean"] - }, - "harvest": { - "type": ["null", "boolean"] - }, - "rollup": { - "type": ["null", "boolean"] - }, - "per_assignee": { - "type": ["null", "boolean"] - }, - "subtasks": { - "type": ["null", "boolean"] - }, - "checklists": { - "type": ["null", "boolean"] - } } - } }, "list": { "type": ["object", "null"], "properties": { "id": { - "type": ["string"] + "type": ["string", "null"] }, "name": { "type": ["null", "string"] @@ -83,7 +51,7 @@ "type": ["null", "string"] }, "space": { - "type": "object", + "type": ["null", "object"], "properties": { "id": { "type": ["null", "string"] @@ -129,7 +97,7 @@ "type": ["null", "boolean"] }, "space": { - "type": "object", + "type": ["object", "null"], "properties": { "id": { "type": ["null", "string"] diff --git a/tap_clickup/schemas/list.json b/tap_clickup/schemas/list.json index 3367d1c..298d245 100644 --- a/tap_clickup/schemas/list.json +++ b/tap_clickup/schemas/list.json @@ -4,7 +4,7 @@ "type": ["object", "null"], "properties": { "id": { - "type": "string" + "type": ["null", "string"] }, "name": { "type": ["null", "string"] @@ -21,10 +21,10 @@ "type": ["object", "null"], "properties": { "id": { - "type": "string" + "type": ["null", "string"] }, "status": { - "type": "string" + "type": ["null", "string"] }, "orderindex": { "type": ["null", "string", "intger"] diff --git a/tap_clickup/schemas/shared.json b/tap_clickup/schemas/shared.json index d31ffb7..22c6995 100644 --- a/tap_clickup/schemas/shared.json +++ b/tap_clickup/schemas/shared.json @@ -4,10 +4,10 @@ "type": ["object", "null"], "properties": { "id": { - "type": "string" + "type": ["null", "string"] }, "status": { - "type": "string" + "type": ["null", "string"] }, "orderindex": { "type": ["null", "string", "integer"] diff --git a/tap_clickup/schemas/space.json b/tap_clickup/schemas/space.json index a887c4e..b79673c 100644 --- a/tap_clickup/schemas/space.json +++ b/tap_clickup/schemas/space.json @@ -7,10 +7,10 @@ "type": "object", "properties": { "id": { - "type": "integer" + "type": ["null", "integer"] }, "username": { - "type": "string" + "type": ["null", "string"] }, "email": { "type": ["null", "string"] @@ -45,10 +45,10 @@ "type": ["object", "null"], "properties": { "id": { - "type": "integer" + "type": ["null", "integer"] }, "username": { - "type": "string" + "type": ["null", "string"] }, "email": { "type": ["null", "string"] @@ -85,10 +85,10 @@ "type": ["object", "null"], "properties": { "id": { - "type": "string" + "type": ["null", "string"] }, "status": { - "type": "string" + "type": ["null", "string"] }, "orderindex": { "type": ["null", "integer", "string"] @@ -102,7 +102,7 @@ "type": ["object", "null"], "properties": { "enabled": { - "type": ["boolean"] + "type": ["boolean", "null"] }, "start_date": { "type": ["null", "boolean"] diff --git a/tap_clickup/schemas/team.json b/tap_clickup/schemas/team.json index 7ba04a8..51e7b13 100644 --- a/tap_clickup/schemas/team.json +++ b/tap_clickup/schemas/team.json @@ -4,10 +4,10 @@ "type": ["object", "null"], "properties": { "id": { - "type": "integer" + "type": ["null", "integer"] }, "username": { - "type": "string" + "type": ["null", "string"] }, "email": { "type": ["null", "string"] @@ -39,16 +39,16 @@ } }, "members": { - "type": "object", + "type": ["null", "object"], "properties": { "user": { - "type": "object", + "type": ["null", "object"], "properties": { "id": { - "type": "integer" + "type": ["null", "integer"] }, "username": { - "type": "string" + "type": ["null", "string"] }, "email": { "type": ["null", "string"] @@ -80,13 +80,13 @@ } }, "invited_by": { - "type": "object", + "type": ["null", "object"], "properties": { "id": { - "type": "integer" + "type": ["null", "integer"] }, "username": { - "type": "string" + "type": ["null", "string"] }, "email": { "type": ["null", "string"] From e6068377370ef1244fdab56dd3612d88bdff6fe2 Mon Sep 17 00:00:00 2001 From: Derek Visch Date: Sat, 8 Jan 2022 12:11:27 -0500 Subject: [PATCH 3/3] noticed a typo in json --- tap_clickup/schemas/list.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tap_clickup/schemas/list.json b/tap_clickup/schemas/list.json index 298d245..5829bda 100644 --- a/tap_clickup/schemas/list.json +++ b/tap_clickup/schemas/list.json @@ -27,7 +27,7 @@ "type": ["null", "string"] }, "orderindex": { - "type": ["null", "string", "intger"] + "type": ["null", "string", "integer"] }, "color": { "type": ["null", "string"]