Skip to content

Commit

Permalink
New notebooks - Bundles, FHIR exploration, etc.
Browse files Browse the repository at this point in the history
Updates for KF production FHIR
FHIR and DRS examples
Updates for NCBI DRS
Custom dbGaP frequency distributions
Starter KIt client examples
Seven Bridges DRS import exploration
Seven Bridges DRS download costs
NCBI DRS Bundle exploration
Imaging Data Commons DICOM DRS access - viewer example
  • Loading branch information
ianfore committed Oct 17, 2022
1 parent d1d7f00 commit 88d014a
Show file tree
Hide file tree
Showing 17 changed files with 8,221 additions and 586 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -142,3 +142,4 @@ dmypy.json

# Mac OS X
.DS_Store
*.dcm
2,929 changes: 2,929 additions & 0 deletions notebooks/Ewings Sarcoma - FHIR and DRS.ipynb

Large diffs are not rendered by default.

61 changes: 32 additions & 29 deletions notebooks/FASPNotebook14-SRAExample.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
"source": [
"<img src=\"../fasp/runner/credits/images/FASPNotebook10.jpg\" style=\"float: right;\">\n",
"\n",
"## Obtain Thousand Genomes files from SRA DRS and submit to Seven Bridges WES\n",
"This notebook explores use of the SRA DRS server. It is derived from FASPScript14.py but has been adapted to use a Seven Bridges WES service. \n",
"## Obtain Thousand Genomes files from NCBI DRS and submit to Seven Bridges WES\n",
"This notebook explores use of the NCBI DRS server. It is derived from FASPScript14.py but has been adapted to use a Seven Bridges WES service. \n",
"\n",
"The mapping of DRS ids to SRA accessions may be done in different ways and the process to do so is in flux.\n",
"\n",
Expand All @@ -16,20 +16,21 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"_Retrieving the query_\n",
"Retrieving the query\n",
"____Page1_______________\n",
"____Page2_______________\n",
"____Page3_______________\n",
"____Page4_______________\n",
"____Page5_______________\n",
"____Page6_______________\n"
"____Page6_______________\n",
"____Page7_______________\n"
]
},
{
Expand Down Expand Up @@ -88,7 +89,7 @@
"2 NA18943 9f38253b281c7e9c99e4bdbececd8e2f SRR1606910"
]
},
"execution_count": 12,
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
Expand Down Expand Up @@ -119,20 +120,21 @@
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"_Retrieving the query_\n",
"Retrieving the query\n",
"____Page1_______________\n",
"____Page2_______________\n",
"____Page3_______________\n",
"____Page4_______________\n",
"____Page5_______________\n",
"____Page6_______________\n"
"____Page6_______________\n",
"____Page7_______________\n"
]
},
{
Expand All @@ -143,7 +145,7 @@
" ['NA18943', '9f38253b281c7e9c99e4bdbececd8e2f', 'SRR1606910']]"
]
},
"execution_count": 13,
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
Expand All @@ -162,7 +164,7 @@
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 3,
"metadata": {},
"outputs": [
{
Expand All @@ -175,23 +177,24 @@
{
"data": {
"text/plain": [
"{'access_methods': [{'access_id': 'b5f46aadbcb48d7141104db0440feb63cd4e61c8',\n",
" 'region': 's3.us-east-1',\n",
" 'type': 'https'},\n",
" {'access_id': '1bc0bc010f0edf4ef18af594acdba5db864db67e',\n",
"{'access_methods': [{'access_id': '1e4846c05c81a49f684e7f940ffbd3a98e5f0e335f019ee4d32d85c72096b743',\n",
" 'region': 'gs.US',\n",
" 'type': 'https'},\n",
" {'access_id': '722d3466edf7ad5f6797f9774e21b368c45ad5b1', 'type': 'https'}],\n",
" {'access_id': 'b14572d74b5aafe87a0fcc873050d6c3993f27338cdd088b5883aed4b118f0c8',\n",
" 'type': 'https'},\n",
" {'access_id': '0623f9350999297e5fa3a77a05c08b8cf1fbd10ef4e392c0d52dde9a4e469a85',\n",
" 'region': 's3.us-east-1',\n",
" 'type': 'https'}],\n",
" 'checksums': [{'checksum': 'fb1cfb04d3ef99d07c21f9dbf87ccc68',\n",
" 'type': 'md5'}],\n",
" 'created_time': '2013-02-25T23:24:10Z',\n",
" 'id': 'fb1cfb04d3ef99d07c21f9dbf87ccc68',\n",
" 'name': 'NA18948.mapped.ILLUMINA.bwa.JPT.exome.20121211.bam',\n",
" 'self_url': 'drs://locate.md-be.ncbi.nlm.nih.gov/fb1cfb04d3ef99d07c21f9dbf87ccc68',\n",
" 'self_url': 'drs://locate.be-md.ncbi.nlm.nih.gov/fb1cfb04d3ef99d07c21f9dbf87ccc68',\n",
" 'size': 8752606127}"
]
},
"execution_count": 14,
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
Expand All @@ -216,15 +219,15 @@
},
{
"cell_type": "code",
"execution_count": 15,
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"access_id:b5f46aadbcb48d7141104db0440feb63cd4e61c8\n",
"url:https://1000genomes.s3.amazonaws.com/phase3/data/NA18948/exome_alignment/NA18948.mapped.ILLUMINA.bwa.JPT.exome.20121211.bam\n"
"access_id:1e4846c05c81a49f684e7f940ffbd3a98e5f0e335f019ee4d32d85c72096b743\n",
"url:https://storage.googleapis.com/genomics-public-data/ftp-trace.ncbi.nih.gov/1000genomes/ftp/phase3/data/NA18948/exome_alignment/NA18948.mapped.ILLUMINA.bwa.JPT.exome.20121211.bam\n"
]
}
],
Expand All @@ -250,14 +253,14 @@
},
{
"cell_type": "code",
"execution_count": 16,
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Running FASPNotebook14-SRAExample.ipynb\n"
"Running /var/folders/wz/jjbxsnr13v7dkw2jkbpmqd_dly65gq/T/ipykernel_9333/2705327017.py\n"
]
}
],
Expand All @@ -280,7 +283,7 @@
},
{
"cell_type": "code",
"execution_count": 17,
"execution_count": 6,
"metadata": {},
"outputs": [
{
Expand All @@ -289,15 +292,15 @@
"text": [
"subject=NA18948, drsID=fb1cfb04d3ef99d07c21f9dbf87ccc68\n",
"https://cgc-ga4gh-api.sbgenomics.com/ga4gh/wes/v1\n",
"Submitted run f5675d2a-4735-4076-b217-accdb6d20858 to sbcgcWESClient\n",
"Submitted run 3acc2387-904e-4310-b866-b8ca6e1dbeb2 to sbcgcWESClient\n",
"_________________________________________________________________________\n",
"subject=NA18945, drsID=9327fb44eb81b49a41e38c8d86eb3b3a\n",
"https://cgc-ga4gh-api.sbgenomics.com/ga4gh/wes/v1\n",
"Submitted run db841fd9-586e-4b9c-a3b4-e7d073dbb583 to sbcgcWESClient\n",
"Submitted run c697c9f9-5de7-4d11-89bb-d95ba27e4826 to sbcgcWESClient\n",
"_________________________________________________________________________\n",
"subject=NA18943, drsID=9f38253b281c7e9c99e4bdbececd8e2f\n",
"https://cgc-ga4gh-api.sbgenomics.com/ga4gh/wes/v1\n",
"Submitted run bf37f355-4fc0-4684-810a-2e8954518e1a to sbcgcWESClient\n",
"Submitted run 637ca388-8127-4933-ac53-272e1abd995a to sbcgcWESClient\n",
"_________________________________________________________________________\n"
]
}
Expand Down Expand Up @@ -460,7 +463,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
Expand All @@ -474,7 +477,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
"version": "3.9.7"
}
},
"nbformat": 4,
Expand Down
26 changes: 18 additions & 8 deletions notebooks/Kids First Familial Leukemia - FHIR and DRS.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -25,8 +25,8 @@
"import json\n",
"\n",
"\n",
"endpoint = 'https://ncpi-api-fhir-service-dev.kidsfirstdrc.org'\n",
"full_cookie_path = os.path.expanduser('~/.keys/ncpi_fhir_cookie.json')\n",
"endpoint = 'https://kf-api-fhir-service.kidsfirstdrc.org'\n",
"full_cookie_path = os.path.expanduser('~/.keys/ncpi_prod_fhir_cookie.json')\n",
"with open(full_cookie_path) as f:\n",
" cookies = json.load(f)\n",
"\n",
Expand All @@ -35,14 +35,24 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"# of subjects found 577137:10\n"
"ename": "JSONDecodeError",
"evalue": "Expecting value: line 1 column 1 (char 0)",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mJSONDecodeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/var/folders/wz/jjbxsnr13v7dkw2jkbpmqd_dly65gq/T/ipykernel_71789/1239882772.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mstudyid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m577137\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mresources\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresources\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msearch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstudy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mstudyid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlimit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0msubjects\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresources\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfetch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"# of subjects found {}:{}\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstudyid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msubjects\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;31m#for s in subjects:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/imfenvs/fasp/lib/python3.9/site-packages/fhirpy/base/lib.py\u001b[0m in \u001b[0;36mfetch\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 139\u001b[0m \u001b[0;32mclass\u001b[0m \u001b[0mSyncSearchSet\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mAbstractSearchSet\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mABC\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 140\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mfetch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 141\u001b[0;31m bundle_data = self.client._fetch_resource(\n\u001b[0m\u001b[1;32m 142\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresource_type\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 143\u001b[0m )\n",
"\u001b[0;32m~/imfenvs/fasp/lib/python3.9/site-packages/fhirpy/base/lib.py\u001b[0m in \u001b[0;36m_fetch_resource\u001b[0;34m(self, path, params)\u001b[0m\n\u001b[1;32m 134\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 135\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_fetch_resource\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 136\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_do_request\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'get'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 137\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 138\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/imfenvs/fasp/lib/python3.9/site-packages/fhirpy/base/lib.py\u001b[0m in \u001b[0;36m_do_request\u001b[0;34m(self, method, path, data, params)\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 125\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;36m200\u001b[0m \u001b[0;34m<=\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstatus_code\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m300\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 126\u001b[0;31m return json.loads(\n\u001b[0m\u001b[1;32m 127\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mobject_hook\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mAttrDict\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 128\u001b[0m ) if r.content else None\n",
"\u001b[0;32m~/.pyenv/versions/3.9.7/lib/python3.9/json/__init__.py\u001b[0m in \u001b[0;36mloads\u001b[0;34m(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[1;32m 357\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mparse_constant\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 358\u001b[0m \u001b[0mkw\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'parse_constant'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparse_constant\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 359\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mcls\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mkw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m~/.pyenv/versions/3.9.7/lib/python3.9/json/decoder.py\u001b[0m in \u001b[0;36mdecode\u001b[0;34m(self, s, _w)\u001b[0m\n\u001b[1;32m 335\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 336\u001b[0m \"\"\"\n\u001b[0;32m--> 337\u001b[0;31m \u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mraw_decode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0midx\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0m_w\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 338\u001b[0m \u001b[0mend\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_w\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 339\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mend\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/.pyenv/versions/3.9.7/lib/python3.9/json/decoder.py\u001b[0m in \u001b[0;36mraw_decode\u001b[0;34m(self, s, idx)\u001b[0m\n\u001b[1;32m 353\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscan_once\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0midx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 354\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mStopIteration\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 355\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mJSONDecodeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Expecting value\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 356\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mJSONDecodeError\u001b[0m: Expecting value: line 1 column 1 (char 0)"
]
}
],
Expand Down
Loading

0 comments on commit 88d014a

Please sign in to comment.