![PyPI - Version](https://img.shields.io/pypi/v/pubmedparser2)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pubmedparser2)
Read XML files and pull out selected values. Values to collect are
determined by paths found in a [structure file](#structure-file). The
structure file also includes a key which associates the values with a
parent element and names, which determine which file to place the
elements in.
Files can be passed as either gzipped or uncompressed XML files or from
standard in.
For more info on Pubmed's XML files see:
[pubmed\_190101\_.dtd.](https://dtd.nlm.nih.gov/ncbi/pubmed/doc/out/190101/index.html)
Usage:
``` python
import pubmedparser
import pubmedparser.ftp
# Download data
files = pubmedparser.ftp.download(range(1, 6))
# Read XML files using a YAML file to describe what data to collect.
data_dir = "file_example"
structure_file = "example/structure.yml"
results = pubmedparser.read_xml(files, structure_file, data_dir)
```
See [the example
file](https://github.com/net-synergy/pubmedparser/blob/master/example/creating_graphs.py)
for more options.
In python, the structure file can be replaced with a dictionary of
dictionaries as well.
Or, as a CLI:
``` bash
xml_read --cache-dir=cache --structure-file=structure.yml \
data/*.xml.gz
```
## Installing with pip
``` bash
pip install pubmedparser2
```
## Building python package
Requires `zlib`.
Clone the repository and cd into the directory. Then use [poetry](https://python-poetry.org/docs) to build and install the package.
``` bash
make python
```
# Structure file
The structure file is a YAML file containing key-value pairs for
different tags and paths. There are two required keys: `root` and `key`.
`Root` provide the top-level tag, in the case of the pubmed files this
will be `PubmedArticleSet`.
``` bash
root: "/PubmedArticleSet"
```
The `/` is not strictly required as the program will ignore them, but
they are used to conform to the
[xpath](https://en.wikipedia.org/wiki/XPath) syntax (although this
program does not handle all cases for `xpath`).
Only tags below the root tag will be considered and the parsing will
terminate once the program has left the root of the tree.
`Key` is a reference tag. In the pubmed case, all data is with respect
to a publication, so the key should identify the publication the values
are linked to. The `PMID` tag is a suitable candidate.
``` bash
key: "/PubmedArticle/MedlineCitation/PMID"
```
After `root`, all paths are taken as relative to the root node.
The other name-pairs in the file determine what other items to collect.
These can either be a simple name and path, like the key, such as:
``` bash
Language: "/PubmedArticle/MedlineCitation/Article/Language"
Keywords: "/PubmedArticle/MedlineCitation/KeywordList/Keyword"
```
Or they can use a hierarchical representation to get multiple values
below a child. This is mainly used to handle lists of items where there
is an indefinite number of items below the list.
``` bash
Author: {
root: "/PubmedArticle/MedlineCitation/Article/AuthorList",
key: "/Author/auto_index",
LastName: "/Author/LastName",
ForeName: "/Author/ForeName",
Affiliation: "/Author/AffiliationInfo/Affiliation",
Orcid: "/Author/Identifier/[@Source='ORCID']"
}
```
Here, all paths are relative to the sub-structures `root` path, which is
in turn relative to the parent structure's `root`. This sub-structure
uses the same rules as the parent structure, so it needs both a `root`
and `key` name-value pair. The results of searching each path are
written to separate files. Each file gets a column for the parent and
child key. So in this case, each element of the author is linked by an
author key and that is related to the publication they authored through
the parent key.
The main parser is called recursively to parse this structure so it's
worth thinking about what the root should be under the context that the
parser will be called with that root. This means if, instead of stopping
at `/AuthorList`, `/Author` was added to the end of the root, the parser
would be called for each individual author, instead of once per author
list, leading to all author's getting the index 0.
There are a number of additional syntax constructs to note in the above
example. The key uses the special name `auto_index`, since there is no
author ID in the XML data, an index is used to count the authors in the
order they appear. This resets for each publication and starts at 0.
Treating the `auto_index` as the tail of a path allows you to control
when the indexing occurs—the index is incremented whenever it hits a
`/Author` tag.
In addition to the `auto_index` key, there is a second special index
name, `condensed`.
``` bash
Reference: {
root: "/PubmedArticle/PubmedData/ReferenceList/Reference/ArticleIdList"
key: "/condensed"
PMID: "/ArticleId/[@IdType='pubmed']"
DOI: "/ArticleId/[@IdType='doi']"
}
```
In the case of `condensed`, instead of writing the results to separate
files, they will printed as columns in the same file, and therefore do
not need an additional key for the sub-structure. If any of the elements
are missing, they will be left blank, for example, if the parser does
not find a pubmed ID for a given reference, the row will look like
`"%s\t\t%s"` where the first string will contain the parent key (the
`PMID` of the publication citing this reference) and the second string
will contain the reference's `DOI`.
The `/[@attribute='value']` syntax at the end of a path tells the parser
to only collect an element if it has an attribute and the attribute's
value matches the supplied value. Similarly the `/@attribute` syntax,
tells the parser to collect the value of the attribute `attribute` along
with the element's value. Then both values will be written to the output
file. Currently only a single attribute can be specified.
Lastly, there is a special syntax for writing condensed sub-structures:
``` bash
Date: "/PubmedArticle/MedlineCitation/Article/Journal/JournalIssue/PubDate/{Year,Month,Day}"
```
The `{child,child,child}` syntax allows you to select multiple children
at the same level to be printed to a single file. This is useful when
multiple children make up a single piece of information (i.e. the
publication date).
A similar example structure file can be found in the example directory
of this project at:
[file:./example/structure.yml](./example/structure.yml).
# Structure dictionary
The structure of the xml data to read can also be described as a python
dictionary of dictionaries.
The form is similar to the file:
``` python
structure = {
"root": "//PubmedArticleSet",
"key": "/PubmedArticle/MedlineCitation/PMID",
"DOI": "/PubmedArticle/PubmedData/ArticleIdList/ArticleId/[@IdType='doi']",
"Date": "/PubmedArticle/MedlineCitation/Article/Journal/JournalIssue/PubDate/{Year,Month,Day}",
"Journal": "/PubmedArticle/MedlineCitation/Article/Journal/{Title,ISOAbbreviation}",
"Language": "/PubmedArticle/MedlineCitation/Article/Language",
"Author": {
"root": "/PubmedArticle/MedlineCitation/Article/AuthorList",
"key": "/Author/auto_index",
"LastName": "/Author/LastName",
"ForName": "/Author/ForeName",
"Affiliation": "/Author/AffiliationInfo/Affiliation",
"Orcid": "/Author/Identifier/[@Source='ORCID']",
},
"Grant": {
"root": "/PubmedArticle/MedlineCitation/Article/GrantList",
"key": "/Grant/auto_index",
"ID": "/Grant/GrantID",
"Agency": "/Grant/Agency",
},
"Chemical": "/PubmedArticle/MedlineCitation/ChemicalList/Chemical/NameOfSubstance/@UI",
"Qualifier": "/PubmedArticle/MedlineCitation/MeshHeadingList/MeshHeading/QualifierName/@UI",
"Descriptor": "/PubmedArticle/MedlineCitation/MeshHeadingList/MeshHeading/DescriptorName/@UI",
"Keywords": "/PubmedArticle/MedlineCitation/KeywordList/Keyword",
"Reference": {
"root": (
"/PubmedArticle/PubmedData/ReferenceList/Reference/ArticleIdList"
),
"key": "/condensed",
"PMID": "/ArticleId/[@IdType='pubmed']",
"DOI": "/ArticleId/[@IdType='doi']",
},
}
```
This can then be passed to `pubmedparser.read_xml` in place of the
structure file.
Raw data
{
"_id": null,
"home_page": "https://github.com/net-synergy/pubmedparser",
"name": "pubmedparser2",
"maintainer": "David Connell",
"docs_url": null,
"requires_python": "<4.0,>=3.10",
"maintainer_email": "davidconnell12@gmail.com",
"keywords": "publication, network, MEDLINE, PubMed, references",
"author": "David Connell",
"author_email": "davidconnell12@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/21/86/2529ffc0a167c40756cfe85df17d6c65e40870e9974c8bcb1b2b94b0af78/pubmedparser2-2.1.2.tar.gz",
"platform": null,
"description": "![PyPI - Version](https://img.shields.io/pypi/v/pubmedparser2)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pubmedparser2)\n\nRead XML files and pull out selected values. Values to collect are\ndetermined by paths found in a [structure file](#structure-file). The\nstructure file also includes a key which associates the values with a\nparent element and names, which determine which file to place the\nelements in.\n\nFiles can be passed as either gzipped or uncompressed XML files or from\nstandard in.\n\nFor more info on Pubmed's XML files see:\n[pubmed\\_190101\\_.dtd.](https://dtd.nlm.nih.gov/ncbi/pubmed/doc/out/190101/index.html)\n\nUsage:\n\n``` python\nimport pubmedparser\nimport pubmedparser.ftp\n\n# Download data\nfiles = pubmedparser.ftp.download(range(1, 6))\n\n# Read XML files using a YAML file to describe what data to collect.\ndata_dir = \"file_example\"\nstructure_file = \"example/structure.yml\"\nresults = pubmedparser.read_xml(files, structure_file, data_dir)\n```\n\nSee [the example\nfile](https://github.com/net-synergy/pubmedparser/blob/master/example/creating_graphs.py)\nfor more options.\n\nIn python, the structure file can be replaced with a dictionary of\ndictionaries as well.\n\nOr, as a CLI:\n\n``` bash\nxml_read --cache-dir=cache --structure-file=structure.yml \\\n data/*.xml.gz\n```\n\n## Installing with pip\n\n``` bash\npip install pubmedparser2\n```\n\n## Building python package\n\nRequires `zlib`.\n\nClone the repository and cd into the directory. Then use [poetry](https://python-poetry.org/docs) to build and install the package.\n\n``` bash\nmake python\n```\n\n# Structure file\n\nThe structure file is a YAML file containing key-value pairs for\ndifferent tags and paths. There are two required keys: `root` and `key`.\n`Root` provide the top-level tag, in the case of the pubmed files this\nwill be `PubmedArticleSet`.\n\n``` bash\nroot: \"/PubmedArticleSet\"\n```\n\nThe `/` is not strictly required as the program will ignore them, but\nthey are used to conform to the\n[xpath](https://en.wikipedia.org/wiki/XPath) syntax (although this\nprogram does not handle all cases for `xpath`).\n\nOnly tags below the root tag will be considered and the parsing will\nterminate once the program has left the root of the tree.\n\n`Key` is a reference tag. In the pubmed case, all data is with respect\nto a publication, so the key should identify the publication the values\nare linked to. The `PMID` tag is a suitable candidate.\n\n``` bash\nkey: \"/PubmedArticle/MedlineCitation/PMID\"\n```\n\nAfter `root`, all paths are taken as relative to the root node.\n\nThe other name-pairs in the file determine what other items to collect.\nThese can either be a simple name and path, like the key, such as:\n\n``` bash\nLanguage: \"/PubmedArticle/MedlineCitation/Article/Language\"\nKeywords: \"/PubmedArticle/MedlineCitation/KeywordList/Keyword\"\n```\n\nOr they can use a hierarchical representation to get multiple values\nbelow a child. This is mainly used to handle lists of items where there\nis an indefinite number of items below the list.\n\n``` bash\nAuthor: {\n root: \"/PubmedArticle/MedlineCitation/Article/AuthorList\",\n key: \"/Author/auto_index\",\n LastName: \"/Author/LastName\",\n ForeName: \"/Author/ForeName\",\n Affiliation: \"/Author/AffiliationInfo/Affiliation\",\n Orcid: \"/Author/Identifier/[@Source='ORCID']\"\n}\n```\n\nHere, all paths are relative to the sub-structures `root` path, which is\nin turn relative to the parent structure's `root`. This sub-structure\nuses the same rules as the parent structure, so it needs both a `root`\nand `key` name-value pair. The results of searching each path are\nwritten to separate files. Each file gets a column for the parent and\nchild key. So in this case, each element of the author is linked by an\nauthor key and that is related to the publication they authored through\nthe parent key.\n\nThe main parser is called recursively to parse this structure so it's\nworth thinking about what the root should be under the context that the\nparser will be called with that root. This means if, instead of stopping\nat `/AuthorList`, `/Author` was added to the end of the root, the parser\nwould be called for each individual author, instead of once per author\nlist, leading to all author's getting the index 0.\n\nThere are a number of additional syntax constructs to note in the above\nexample. The key uses the special name `auto_index`, since there is no\nauthor ID in the XML data, an index is used to count the authors in the\norder they appear. This resets for each publication and starts at 0.\nTreating the `auto_index` as the tail of a path allows you to control\nwhen the indexing occurs\u2014the index is incremented whenever it hits a\n`/Author` tag.\n\nIn addition to the `auto_index` key, there is a second special index\nname, `condensed`.\n\n``` bash\nReference: {\n root: \"/PubmedArticle/PubmedData/ReferenceList/Reference/ArticleIdList\"\n key: \"/condensed\"\n PMID: \"/ArticleId/[@IdType='pubmed']\"\n DOI: \"/ArticleId/[@IdType='doi']\"\n}\n```\n\nIn the case of `condensed`, instead of writing the results to separate\nfiles, they will printed as columns in the same file, and therefore do\nnot need an additional key for the sub-structure. If any of the elements\nare missing, they will be left blank, for example, if the parser does\nnot find a pubmed ID for a given reference, the row will look like\n`\"%s\\t\\t%s\"` where the first string will contain the parent key (the\n`PMID` of the publication citing this reference) and the second string\nwill contain the reference's `DOI`.\n\nThe `/[@attribute='value']` syntax at the end of a path tells the parser\nto only collect an element if it has an attribute and the attribute's\nvalue matches the supplied value. Similarly the `/@attribute` syntax,\ntells the parser to collect the value of the attribute `attribute` along\nwith the element's value. Then both values will be written to the output\nfile. Currently only a single attribute can be specified.\n\nLastly, there is a special syntax for writing condensed sub-structures:\n\n``` bash\nDate: \"/PubmedArticle/MedlineCitation/Article/Journal/JournalIssue/PubDate/{Year,Month,Day}\"\n```\n\nThe `{child,child,child}` syntax allows you to select multiple children\nat the same level to be printed to a single file. This is useful when\nmultiple children make up a single piece of information (i.e. the\npublication date).\n\nA similar example structure file can be found in the example directory\nof this project at:\n[file:./example/structure.yml](./example/structure.yml).\n\n# Structure dictionary\n\nThe structure of the xml data to read can also be described as a python\ndictionary of dictionaries.\n\nThe form is similar to the file:\n\n``` python\nstructure = {\n \"root\": \"//PubmedArticleSet\",\n \"key\": \"/PubmedArticle/MedlineCitation/PMID\",\n \"DOI\": \"/PubmedArticle/PubmedData/ArticleIdList/ArticleId/[@IdType='doi']\",\n \"Date\": \"/PubmedArticle/MedlineCitation/Article/Journal/JournalIssue/PubDate/{Year,Month,Day}\",\n \"Journal\": \"/PubmedArticle/MedlineCitation/Article/Journal/{Title,ISOAbbreviation}\",\n \"Language\": \"/PubmedArticle/MedlineCitation/Article/Language\",\n \"Author\": {\n \"root\": \"/PubmedArticle/MedlineCitation/Article/AuthorList\",\n \"key\": \"/Author/auto_index\",\n \"LastName\": \"/Author/LastName\",\n \"ForName\": \"/Author/ForeName\",\n \"Affiliation\": \"/Author/AffiliationInfo/Affiliation\",\n \"Orcid\": \"/Author/Identifier/[@Source='ORCID']\",\n },\n \"Grant\": {\n \"root\": \"/PubmedArticle/MedlineCitation/Article/GrantList\",\n \"key\": \"/Grant/auto_index\",\n \"ID\": \"/Grant/GrantID\",\n \"Agency\": \"/Grant/Agency\",\n },\n \"Chemical\": \"/PubmedArticle/MedlineCitation/ChemicalList/Chemical/NameOfSubstance/@UI\",\n \"Qualifier\": \"/PubmedArticle/MedlineCitation/MeshHeadingList/MeshHeading/QualifierName/@UI\",\n \"Descriptor\": \"/PubmedArticle/MedlineCitation/MeshHeadingList/MeshHeading/DescriptorName/@UI\",\n \"Keywords\": \"/PubmedArticle/MedlineCitation/KeywordList/Keyword\",\n \"Reference\": {\n \"root\": (\n \"/PubmedArticle/PubmedData/ReferenceList/Reference/ArticleIdList\"\n ),\n \"key\": \"/condensed\",\n \"PMID\": \"/ArticleId/[@IdType='pubmed']\",\n \"DOI\": \"/ArticleId/[@IdType='doi']\",\n },\n}\n```\n\nThis can then be passed to `pubmedparser.read_xml` in place of the\nstructure file.\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Download and parse pubmed publication data",
"version": "2.1.2",
"project_urls": {
"Homepage": "https://github.com/net-synergy/pubmedparser",
"Repository": "https://github.com/net-synergy/pubmedparser"
},
"split_keywords": [
"publication",
" network",
" medline",
" pubmed",
" references"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "6646e4c5d56f35759b32eb7f0b3e225b48b86fc74b23a7beed5ac6f2d685e689",
"md5": "7d3d5d2c08a509f16a4e85642c9abea8",
"sha256": "a9fb74e9984af9493e37f1799ec0261b0ae8e50c86633cec3b24b1318e57a72c"
},
"downloads": -1,
"filename": "pubmedparser2-2.1.2-cp310-cp310-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "7d3d5d2c08a509f16a4e85642c9abea8",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.10",
"size": 43066,
"upload_time": "2024-11-05T02:28:04",
"upload_time_iso_8601": "2024-11-05T02:28:04.858689Z",
"url": "https://files.pythonhosted.org/packages/66/46/e4c5d56f35759b32eb7f0b3e225b48b86fc74b23a7beed5ac6f2d685e689/pubmedparser2-2.1.2-cp310-cp310-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f22131d43a62db12a140e67251fc9fb23fc995c0182e3b6fd595055e88e4b8f4",
"md5": "07fb82b4436edceb4dee52dcf9e254d0",
"sha256": "477f5af617c0a42f50e42ddbff9dac4be1003c508c8035cb9f01c0c741bd7aad"
},
"downloads": -1,
"filename": "pubmedparser2-2.1.2-cp310-cp310-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "07fb82b4436edceb4dee52dcf9e254d0",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.10",
"size": 61064,
"upload_time": "2024-11-05T02:28:06",
"upload_time_iso_8601": "2024-11-05T02:28:06.314412Z",
"url": "https://files.pythonhosted.org/packages/f2/21/31d43a62db12a140e67251fc9fb23fc995c0182e3b6fd595055e88e4b8f4/pubmedparser2-2.1.2-cp310-cp310-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7ba41be96f397065f7b8caba2334f2432ac40eb6d7ab1a9c402fe46e2c144fc8",
"md5": "523a9704f14aa361e23316fb2498687b",
"sha256": "821cba3c6d49c74ca34ccc38f2f8eb1c0d4f4992e3ea843dbf52e0d48a3e47cf"
},
"downloads": -1,
"filename": "pubmedparser2-2.1.2-cp310-cp310-manylinux_2_35_x86_64.whl",
"has_sig": false,
"md5_digest": "523a9704f14aa361e23316fb2498687b",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.10",
"size": 111835,
"upload_time": "2024-11-05T02:28:07",
"upload_time_iso_8601": "2024-11-05T02:28:07.477819Z",
"url": "https://files.pythonhosted.org/packages/7b/a4/1be96f397065f7b8caba2334f2432ac40eb6d7ab1a9c402fe46e2c144fc8/pubmedparser2-2.1.2-cp310-cp310-manylinux_2_35_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fef7baaff8ff68a8d9dac737161ad9b42db03aed71508bb0bf2b38b98a8142a3",
"md5": "bfebd1d05e792a872b56bc7d841edfac",
"sha256": "90060e980ba90f99fb91a8b5efb3c7a0eb549999bf11e1b6a59f1e702cc34b54"
},
"downloads": -1,
"filename": "pubmedparser2-2.1.2-cp311-cp311-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "bfebd1d05e792a872b56bc7d841edfac",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.10",
"size": 61180,
"upload_time": "2024-11-05T02:28:08",
"upload_time_iso_8601": "2024-11-05T02:28:08.777945Z",
"url": "https://files.pythonhosted.org/packages/fe/f7/baaff8ff68a8d9dac737161ad9b42db03aed71508bb0bf2b38b98a8142a3/pubmedparser2-2.1.2-cp311-cp311-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "14908e0faafb56b26c78cdd1f98f9024aca010f3f311510311c666ec6fd55566",
"md5": "72fbae8973def597b247d2ad55cd257c",
"sha256": "d4df29db1177b0317e775091c36395f0f4da6a2164226d0acc041a132b0c7c22"
},
"downloads": -1,
"filename": "pubmedparser2-2.1.2-cp311-cp311-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "72fbae8973def597b247d2ad55cd257c",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.10",
"size": 61069,
"upload_time": "2024-11-05T02:28:10",
"upload_time_iso_8601": "2024-11-05T02:28:10.532063Z",
"url": "https://files.pythonhosted.org/packages/14/90/8e0faafb56b26c78cdd1f98f9024aca010f3f311510311c666ec6fd55566/pubmedparser2-2.1.2-cp311-cp311-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1edfae727deab35ace0e898e940b99c1d6b2e2975bc0ed47f1e33826742ffd90",
"md5": "a6c766bc81389d2ed8b026afbd016a5c",
"sha256": "a35edfae591f183f5a4f43bd9222e6485c7fea86c3e1224448b81dbb798dcb49"
},
"downloads": -1,
"filename": "pubmedparser2-2.1.2-cp311-cp311-manylinux_2_35_x86_64.whl",
"has_sig": false,
"md5_digest": "a6c766bc81389d2ed8b026afbd016a5c",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.10",
"size": 112005,
"upload_time": "2024-11-05T02:28:12",
"upload_time_iso_8601": "2024-11-05T02:28:12.141413Z",
"url": "https://files.pythonhosted.org/packages/1e/df/ae727deab35ace0e898e940b99c1d6b2e2975bc0ed47f1e33826742ffd90/pubmedparser2-2.1.2-cp311-cp311-manylinux_2_35_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "40fedb27331b9f614c7fc339885e1064f144510c7992c1461951ab66d918c41e",
"md5": "c41699dac4d6a9c817d53df90a94470d",
"sha256": "bc4d926b26bbd7b1b4c38dea3a84f57f1cc7eef325e6e6530039079616337e29"
},
"downloads": -1,
"filename": "pubmedparser2-2.1.2-cp312-cp312-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "c41699dac4d6a9c817d53df90a94470d",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.10",
"size": 61192,
"upload_time": "2024-11-05T02:28:14",
"upload_time_iso_8601": "2024-11-05T02:28:14.166539Z",
"url": "https://files.pythonhosted.org/packages/40/fe/db27331b9f614c7fc339885e1064f144510c7992c1461951ab66d918c41e/pubmedparser2-2.1.2-cp312-cp312-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "429fdef6f10d00ff4dc7a0670cd5ae1a3464247b7f975056d4c5e82c99460a18",
"md5": "8a39337ea5cc1991c26bb261f2d7d97c",
"sha256": "d0fd4e29ffadfa30f8ce53a607f9d37ae574575366b884334699dabac7118691"
},
"downloads": -1,
"filename": "pubmedparser2-2.1.2-cp312-cp312-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "8a39337ea5cc1991c26bb261f2d7d97c",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.10",
"size": 61074,
"upload_time": "2024-11-05T02:28:15",
"upload_time_iso_8601": "2024-11-05T02:28:15.906542Z",
"url": "https://files.pythonhosted.org/packages/42/9f/def6f10d00ff4dc7a0670cd5ae1a3464247b7f975056d4c5e82c99460a18/pubmedparser2-2.1.2-cp312-cp312-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "439cbed728b6ba9c31ff622bbc151c5a9d6ed3c0097a1c8f954292dc04a36078",
"md5": "d9f1d307cf27e6fafa474191debfd461",
"sha256": "6ed156ad7e607c183d46c2f25acf23cb153d8d48ef0a5ffe061c041408bacb8e"
},
"downloads": -1,
"filename": "pubmedparser2-2.1.2-cp312-cp312-manylinux_2_35_x86_64.whl",
"has_sig": false,
"md5_digest": "d9f1d307cf27e6fafa474191debfd461",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.10",
"size": 111965,
"upload_time": "2024-11-05T02:28:17",
"upload_time_iso_8601": "2024-11-05T02:28:17.617075Z",
"url": "https://files.pythonhosted.org/packages/43/9c/bed728b6ba9c31ff622bbc151c5a9d6ed3c0097a1c8f954292dc04a36078/pubmedparser2-2.1.2-cp312-cp312-manylinux_2_35_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6bda6947df6637d51d4d2554f56f322f53c1c1367409b39969405e4b2f10f849",
"md5": "6cd2f7dac20718a47c68c9e5d705e913",
"sha256": "d5c5a2985e4b75c77d974a4befb48fd8b181130c0f54f51c809f075e5cd56178"
},
"downloads": -1,
"filename": "pubmedparser2-2.1.2-cp313-cp313-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "6cd2f7dac20718a47c68c9e5d705e913",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.10",
"size": 61177,
"upload_time": "2024-11-05T02:28:19",
"upload_time_iso_8601": "2024-11-05T02:28:19.432580Z",
"url": "https://files.pythonhosted.org/packages/6b/da/6947df6637d51d4d2554f56f322f53c1c1367409b39969405e4b2f10f849/pubmedparser2-2.1.2-cp313-cp313-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6afb2a7b5509d0e0954545bcddc38e606fc5e0379bd61e5d504aca055419f528",
"md5": "41c1ecfa624713e4bba0acddabe2f9d1",
"sha256": "e4d13c763214f55a6672d647c098a4d1e0eea6559998b6ddf1ccf357326aff89"
},
"downloads": -1,
"filename": "pubmedparser2-2.1.2-cp313-cp313-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "41c1ecfa624713e4bba0acddabe2f9d1",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.10",
"size": 61067,
"upload_time": "2024-11-05T02:28:20",
"upload_time_iso_8601": "2024-11-05T02:28:20.974452Z",
"url": "https://files.pythonhosted.org/packages/6a/fb/2a7b5509d0e0954545bcddc38e606fc5e0379bd61e5d504aca055419f528/pubmedparser2-2.1.2-cp313-cp313-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "67464c1848702055b4ea2f35e4fd383e13602de1423cd9bb4d6945e28b4d77e9",
"md5": "ca70b982ba885cf2af4573e6d6b17b27",
"sha256": "5b3fa04bb19da712f9d311630bb09a958943634d43f60bedb7b66c4d327e0613"
},
"downloads": -1,
"filename": "pubmedparser2-2.1.2-cp313-cp313-manylinux_2_35_x86_64.whl",
"has_sig": false,
"md5_digest": "ca70b982ba885cf2af4573e6d6b17b27",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.10",
"size": 112024,
"upload_time": "2024-11-05T02:28:22",
"upload_time_iso_8601": "2024-11-05T02:28:22.589046Z",
"url": "https://files.pythonhosted.org/packages/67/46/4c1848702055b4ea2f35e4fd383e13602de1423cd9bb4d6945e28b4d77e9/pubmedparser2-2.1.2-cp313-cp313-manylinux_2_35_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "21862529ffc0a167c40756cfe85df17d6c65e40870e9974c8bcb1b2b94b0af78",
"md5": "5fadc4f2dbd24536d4b2df944bf2bf8e",
"sha256": "13a2dd4fc4765ed5ac16d0618b115c6c1ba7beff9cfd2e7905349557b45431d4"
},
"downloads": -1,
"filename": "pubmedparser2-2.1.2.tar.gz",
"has_sig": false,
"md5_digest": "5fadc4f2dbd24536d4b2df944bf2bf8e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.10",
"size": 42784,
"upload_time": "2024-11-05T02:28:24",
"upload_time_iso_8601": "2024-11-05T02:28:24.148521Z",
"url": "https://files.pythonhosted.org/packages/21/86/2529ffc0a167c40756cfe85df17d6c65e40870e9974c8bcb1b2b94b0af78/pubmedparser2-2.1.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-05 02:28:24",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "net-synergy",
"github_project": "pubmedparser",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pubmedparser2"
}