Repository files navigation

py3data

PyPIDOI

py3data is a Python library for re3data registry. Re3data is a global registry of research data repositories that covers research data repositories from different academic disciplines. It includes repositories that enable permanent storage of and access to data sets to researchers, funding bodies, publishers, and scholarly institutions. Re3data offers an open and free REST API. py3data is a lightweight and thin Python interface to the beta version of this API.

The following features of re3data are currently supported by py3data:

  • Get single repositories
  • Filter and query repositories

Key features

  • Pipe operations - py3data can handle multiple operations in a sequence. This allows the developer to write understandable queries. For examples, see code snippets.
  • JSON support - Re3data doesn't offer a JSON implementation of the REST API. py3data parses the XML REST API and offers it in Python dict-like objects.
  • Schema fixes - The re3data Schema is slightly hard to parse in Python directly. Re3data makes is very easy to parse the API and solves the issues.
  • Permissive license - Re3data data is CC0 licensed 🙌. py3data is published under the MIT license.

Installation

py3data requires Python 3.8 or later.

pip install py3data

Getting started

frompy3dataimportRepositories

Get single repository

Get a single Repository

Repositories()["r3d100011986"]

The result is a Repository object, which is very similar to a dictionary. Find the available fields with .keys().

For example, get the open access status:

Repositories()["r3d100011986"]["subjects"]
[{'subjectScheme': 'DFG', 'subjectName': '2 Life Sciences'},
{'subjectScheme': 'DFG', 'subjectName': '202 Plant Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '20202 Plant Ecology and Ecosystem Analysis'},
{'subjectScheme': 'DFG',
'subjectName': '20203 Inter-organismic Interactions of Plants'},
{'subjectScheme': 'DFG', 'subjectName': '203 Zoology'},
{'subjectScheme': 'DFG',
'subjectName': '20303 Animal Ecology, Biodiversity and Ecosystem Research'},
{'subjectScheme': 'DFG', 'subjectName': '21 Biology'},
{'subjectScheme': 'DFG', 'subjectName': '3 Natural Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '313 Atmospheric Science and Oceanography'},
{'subjectScheme': 'DFG', 'subjectName': '318 Water Research'},
{'subjectScheme': 'DFG',
'subjectName': '31801 Hydrogeology, Hydrology, Limnology, Urban Water Management, Water Chemistry, Integrated Water Resources Management'},
{'subjectScheme': 'DFG',
'subjectName': '34 Geosciences (including Geography)'}]

Get lists of repositories

It is possible to get lists of results from re3data. However keep in mind that lists consist of Repository objects with very few metadata (id, name, doi, link).

Get all repositories:

Repositories().get()

For lists of repositories, you can also count the number of records found instead of returning the results. This also works for search queries and filters.

Repositories().count()
# 3137

Filter and query records

Re3data makes use of filters and queries. Filters can be used to slice the structured metadata of re3data and queries can be used to search for specific terms or phrases. Both filters and queries can be used in one request.

An overview of all the filters can be found under "Beta" in the REST API documentation. It can be hard to find the correct values sometimes. In that case, look for values in other single Repository requests, the Metadata Schema, or the website.

(
Repositories()
.filter(countries="CAN")
.filter(subjects=["2 Life Sciences", "3 Natural Sciences"])
.filter(pidSystems="DOI")
.query("University")
.get()
)

which is identical to:

(
Repositories()
.filter(
countries="CAN",
subjects=["2 Life Sciences", "3 Natural Sciences"],
pidSystems="DOI",
)
.query("University")
.get()
)

Code snippets

A list of examples for the re3data.org dataset.

Get repositories running Dataverse software

(
Repositories()
.filter(software="Dataverse")
.get()
)

Get repositories with word "climate" and DOI identifiers

(
Repositories()
.filter(pidSystems="DOI")
.query("climate")
.get()
)

Data dump

The following code dumps all data of re3data.org into a list of dicts. The following code can take a while to run because of the structure of the re3data API.

frompy3dataimportRepositoriesall_data= [Repositories()[x["id"]] forxinRepositories().get()]

License

MIT

Contact

This library is a community contribution. The authors of this Python library aren't affiliated with re3data.

Feel free to reach out with questions, remarks, and suggestions. The issue tracker is a good starting point. You can also email me at jonathandebruinos@gmail.com.

About

A flexible and lightweight Python interface to the re3data.org database

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

py3data

PyPIDOI

py3data is a Python library for re3data registry. Re3data is a global registry of research data repositories that covers research data repositories from different academic disciplines. It includes repositories that enable permanent storage of and access to data sets to researchers, funding bodies, publishers, and scholarly institutions. Re3data offers an open and free REST API. py3data is a lightweight and thin Python interface to the beta version of this API.

The following features of re3data are currently supported by py3data:

  • Get single repositories
  • Filter and query repositories

Key features

  • Pipe operations - py3data can handle multiple operations in a sequence. This allows the developer to write understandable queries. For examples, see code snippets.
  • JSON support - Re3data doesn't offer a JSON implementation of the REST API. py3data parses the XML REST API and offers it in Python dict-like objects.
  • Schema fixes - The re3data Schema is slightly hard to parse in Python directly. Re3data makes is very easy to parse the API and solves the issues.
  • Permissive license - Re3data data is CC0 licensed 🙌. py3data is published under the MIT license.

Installation

py3data requires Python 3.8 or later.

pip install py3data

Getting started

frompy3dataimportRepositories

Get single repository

Get a single Repository

Repositories()["r3d100011986"]

The result is a Repository object, which is very similar to a dictionary. Find the available fields with .keys().

For example, get the open access status:

Repositories()["r3d100011986"]["subjects"]
[{'subjectScheme': 'DFG', 'subjectName': '2 Life Sciences'},
{'subjectScheme': 'DFG', 'subjectName': '202 Plant Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '20202 Plant Ecology and Ecosystem Analysis'},
{'subjectScheme': 'DFG',
'subjectName': '20203 Inter-organismic Interactions of Plants'},
{'subjectScheme': 'DFG', 'subjectName': '203 Zoology'},
{'subjectScheme': 'DFG',
'subjectName': '20303 Animal Ecology, Biodiversity and Ecosystem Research'},
{'subjectScheme': 'DFG', 'subjectName': '21 Biology'},
{'subjectScheme': 'DFG', 'subjectName': '3 Natural Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '313 Atmospheric Science and Oceanography'},
{'subjectScheme': 'DFG', 'subjectName': '318 Water Research'},
{'subjectScheme': 'DFG',
'subjectName': '31801 Hydrogeology, Hydrology, Limnology, Urban Water Management, Water Chemistry, Integrated Water Resources Management'},
{'subjectScheme': 'DFG',
'subjectName': '34 Geosciences (including Geography)'}]

Get lists of repositories

It is possible to get lists of results from re3data. However keep in mind that lists consist of Repository objects with very few metadata (id, name, doi, link).

Get all repositories:

Repositories().get()

For lists of repositories, you can also count the number of records found instead of returning the results. This also works for search queries and filters.

Repositories().count()
# 3137

Filter and query records

Re3data makes use of filters and queries. Filters can be used to slice the structured metadata of re3data and queries can be used to search for specific terms or phrases. Both filters and queries can be used in one request.

An overview of all the filters can be found under "Beta" in the REST API documentation. It can be hard to find the correct values sometimes. In that case, look for values in other single Repository requests, the Metadata Schema, or the website.

(
Repositories()
.filter(countries="CAN")
.filter(subjects=["2 Life Sciences", "3 Natural Sciences"])
.filter(pidSystems="DOI")
.query("University")
.get()
)

which is identical to:

(
Repositories()
.filter(
countries="CAN",
subjects=["2 Life Sciences", "3 Natural Sciences"],
pidSystems="DOI",
)
.query("University")
.get()
)

Code snippets

A list of examples for the re3data.org dataset.

Get repositories running Dataverse software

(
Repositories()
.filter(software="Dataverse")
.get()
)

Get repositories with word "climate" and DOI identifiers

(
Repositories()
.filter(pidSystems="DOI")
.query("climate")
.get()
)

Data dump

The following code dumps all data of re3data.org into a list of dicts. The following code can take a while to run because of the structure of the re3data API.

frompy3dataimportRepositoriesall_data= [Repositories()[x["id"]] forxinRepositories().get()]

License

MIT

Contact

This library is a community contribution. The authors of this Python library aren't affiliated with re3data.

Feel free to reach out with questions, remarks, and suggestions. The issue tracker is a good starting point. You can also email me at jonathandebruinos@gmail.com.

About

A flexible and lightweight Python interface to the re3data.org database

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

py3data

PyPIDOI

py3data is a Python library for re3data registry. Re3data is a global registry of research data repositories that covers research data repositories from different academic disciplines. It includes repositories that enable permanent storage of and access to data sets to researchers, funding bodies, publishers, and scholarly institutions. Re3data offers an open and free REST API. py3data is a lightweight and thin Python interface to the beta version of this API.

The following features of re3data are currently supported by py3data:

  • Get single repositories
  • Filter and query repositories

Key features

  • Pipe operations - py3data can handle multiple operations in a sequence. This allows the developer to write understandable queries. For examples, see code snippets.
  • JSON support - Re3data doesn't offer a JSON implementation of the REST API. py3data parses the XML REST API and offers it in Python dict-like objects.
  • Schema fixes - The re3data Schema is slightly hard to parse in Python directly. Re3data makes is very easy to parse the API and solves the issues.
  • Permissive license - Re3data data is CC0 licensed 🙌. py3data is published under the MIT license.

Installation

py3data requires Python 3.8 or later.

pip install py3data

Getting started

frompy3dataimportRepositories

Get single repository

Get a single Repository

Repositories()["r3d100011986"]

The result is a Repository object, which is very similar to a dictionary. Find the available fields with .keys().

For example, get the open access status:

Repositories()["r3d100011986"]["subjects"]
[{'subjectScheme': 'DFG', 'subjectName': '2 Life Sciences'},
{'subjectScheme': 'DFG', 'subjectName': '202 Plant Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '20202 Plant Ecology and Ecosystem Analysis'},
{'subjectScheme': 'DFG',
'subjectName': '20203 Inter-organismic Interactions of Plants'},
{'subjectScheme': 'DFG', 'subjectName': '203 Zoology'},
{'subjectScheme': 'DFG',
'subjectName': '20303 Animal Ecology, Biodiversity and Ecosystem Research'},
{'subjectScheme': 'DFG', 'subjectName': '21 Biology'},
{'subjectScheme': 'DFG', 'subjectName': '3 Natural Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '313 Atmospheric Science and Oceanography'},
{'subjectScheme': 'DFG', 'subjectName': '318 Water Research'},
{'subjectScheme': 'DFG',
'subjectName': '31801 Hydrogeology, Hydrology, Limnology, Urban Water Management, Water Chemistry, Integrated Water Resources Management'},
{'subjectScheme': 'DFG',
'subjectName': '34 Geosciences (including Geography)'}]

Get lists of repositories

It is possible to get lists of results from re3data. However keep in mind that lists consist of Repository objects with very few metadata (id, name, doi, link).

Get all repositories:

Repositories().get()

For lists of repositories, you can also count the number of records found instead of returning the results. This also works for search queries and filters.

Repositories().count()
# 3137

Filter and query records

Re3data makes use of filters and queries. Filters can be used to slice the structured metadata of re3data and queries can be used to search for specific terms or phrases. Both filters and queries can be used in one request.

An overview of all the filters can be found under "Beta" in the REST API documentation. It can be hard to find the correct values sometimes. In that case, look for values in other single Repository requests, the Metadata Schema, or the website.

(
Repositories()
.filter(countries="CAN")
.filter(subjects=["2 Life Sciences", "3 Natural Sciences"])
.filter(pidSystems="DOI")
.query("University")
.get()
)

which is identical to:

(
Repositories()
.filter(
countries="CAN",
subjects=["2 Life Sciences", "3 Natural Sciences"],
pidSystems="DOI",
)
.query("University")
.get()
)

Code snippets

A list of examples for the re3data.org dataset.

Get repositories running Dataverse software

(
Repositories()
.filter(software="Dataverse")
.get()
)

Get repositories with word "climate" and DOI identifiers

(
Repositories()
.filter(pidSystems="DOI")
.query("climate")
.get()
)

Data dump

The following code dumps all data of re3data.org into a list of dicts. The following code can take a while to run because of the structure of the re3data API.

frompy3dataimportRepositoriesall_data= [Repositories()[x["id"]] forxinRepositories().get()]

License

MIT

Contact

This library is a community contribution. The authors of this Python library aren't affiliated with re3data.

Feel free to reach out with questions, remarks, and suggestions. The issue tracker is a good starting point. You can also email me at jonathandebruinos@gmail.com.

About

A flexible and lightweight Python interface to the re3data.org database

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

py3data

PyPIDOI

py3data is a Python library for re3data registry. Re3data is a global registry of research data repositories that covers research data repositories from different academic disciplines. It includes repositories that enable permanent storage of and access to data sets to researchers, funding bodies, publishers, and scholarly institutions. Re3data offers an open and free REST API. py3data is a lightweight and thin Python interface to the beta version of this API.

The following features of re3data are currently supported by py3data:

  • Get single repositories
  • Filter and query repositories

Key features

  • Pipe operations - py3data can handle multiple operations in a sequence. This allows the developer to write understandable queries. For examples, see code snippets.
  • JSON support - Re3data doesn't offer a JSON implementation of the REST API. py3data parses the XML REST API and offers it in Python dict-like objects.
  • Schema fixes - The re3data Schema is slightly hard to parse in Python directly. Re3data makes is very easy to parse the API and solves the issues.
  • Permissive license - Re3data data is CC0 licensed 🙌. py3data is published under the MIT license.

Installation

py3data requires Python 3.8 or later.

pip install py3data

Getting started

frompy3dataimportRepositories

Get single repository

Get a single Repository

Repositories()["r3d100011986"]

The result is a Repository object, which is very similar to a dictionary. Find the available fields with .keys().

For example, get the open access status:

Repositories()["r3d100011986"]["subjects"]
[{'subjectScheme': 'DFG', 'subjectName': '2 Life Sciences'},
{'subjectScheme': 'DFG', 'subjectName': '202 Plant Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '20202 Plant Ecology and Ecosystem Analysis'},
{'subjectScheme': 'DFG',
'subjectName': '20203 Inter-organismic Interactions of Plants'},
{'subjectScheme': 'DFG', 'subjectName': '203 Zoology'},
{'subjectScheme': 'DFG',
'subjectName': '20303 Animal Ecology, Biodiversity and Ecosystem Research'},
{'subjectScheme': 'DFG', 'subjectName': '21 Biology'},
{'subjectScheme': 'DFG', 'subjectName': '3 Natural Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '313 Atmospheric Science and Oceanography'},
{'subjectScheme': 'DFG', 'subjectName': '318 Water Research'},
{'subjectScheme': 'DFG',
'subjectName': '31801 Hydrogeology, Hydrology, Limnology, Urban Water Management, Water Chemistry, Integrated Water Resources Management'},
{'subjectScheme': 'DFG',
'subjectName': '34 Geosciences (including Geography)'}]

Get lists of repositories

It is possible to get lists of results from re3data. However keep in mind that lists consist of Repository objects with very few metadata (id, name, doi, link).

Get all repositories:

Repositories().get()

For lists of repositories, you can also count the number of records found instead of returning the results. This also works for search queries and filters.

Repositories().count()
# 3137

Filter and query records

Re3data makes use of filters and queries. Filters can be used to slice the structured metadata of re3data and queries can be used to search for specific terms or phrases. Both filters and queries can be used in one request.

An overview of all the filters can be found under "Beta" in the REST API documentation. It can be hard to find the correct values sometimes. In that case, look for values in other single Repository requests, the Metadata Schema, or the website.

(
Repositories()
.filter(countries="CAN")
.filter(subjects=["2 Life Sciences", "3 Natural Sciences"])
.filter(pidSystems="DOI")
.query("University")
.get()
)

which is identical to:

(
Repositories()
.filter(
countries="CAN",
subjects=["2 Life Sciences", "3 Natural Sciences"],
pidSystems="DOI",
)
.query("University")
.get()
)

Code snippets

A list of examples for the re3data.org dataset.

Get repositories running Dataverse software

(
Repositories()
.filter(software="Dataverse")
.get()
)

Get repositories with word "climate" and DOI identifiers

(
Repositories()
.filter(pidSystems="DOI")
.query("climate")
.get()
)

Data dump

The following code dumps all data of re3data.org into a list of dicts. The following code can take a while to run because of the structure of the re3data API.

frompy3dataimportRepositoriesall_data= [Repositories()[x["id"]] forxinRepositories().get()]

License

MIT

Contact

This library is a community contribution. The authors of this Python library aren't affiliated with re3data.

Feel free to reach out with questions, remarks, and suggestions. The issue tracker is a good starting point. You can also email me at jonathandebruinos@gmail.com.

About

A flexible and lightweight Python interface to the re3data.org database

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

py3data

PyPIDOI

py3data is a Python library for re3data registry. Re3data is a global registry of research data repositories that covers research data repositories from different academic disciplines. It includes repositories that enable permanent storage of and access to data sets to researchers, funding bodies, publishers, and scholarly institutions. Re3data offers an open and free REST API. py3data is a lightweight and thin Python interface to the beta version of this API.

The following features of re3data are currently supported by py3data:

  • Get single repositories
  • Filter and query repositories

Key features

  • Pipe operations - py3data can handle multiple operations in a sequence. This allows the developer to write understandable queries. For examples, see code snippets.
  • JSON support - Re3data doesn't offer a JSON implementation of the REST API. py3data parses the XML REST API and offers it in Python dict-like objects.
  • Schema fixes - The re3data Schema is slightly hard to parse in Python directly. Re3data makes is very easy to parse the API and solves the issues.
  • Permissive license - Re3data data is CC0 licensed 🙌. py3data is published under the MIT license.

Installation

py3data requires Python 3.8 or later.

pip install py3data

Getting started

frompy3dataimportRepositories

Get single repository

Get a single Repository

Repositories()["r3d100011986"]

The result is a Repository object, which is very similar to a dictionary. Find the available fields with .keys().

For example, get the open access status:

Repositories()["r3d100011986"]["subjects"]
[{'subjectScheme': 'DFG', 'subjectName': '2 Life Sciences'},
{'subjectScheme': 'DFG', 'subjectName': '202 Plant Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '20202 Plant Ecology and Ecosystem Analysis'},
{'subjectScheme': 'DFG',
'subjectName': '20203 Inter-organismic Interactions of Plants'},
{'subjectScheme': 'DFG', 'subjectName': '203 Zoology'},
{'subjectScheme': 'DFG',
'subjectName': '20303 Animal Ecology, Biodiversity and Ecosystem Research'},
{'subjectScheme': 'DFG', 'subjectName': '21 Biology'},
{'subjectScheme': 'DFG', 'subjectName': '3 Natural Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '313 Atmospheric Science and Oceanography'},
{'subjectScheme': 'DFG', 'subjectName': '318 Water Research'},
{'subjectScheme': 'DFG',
'subjectName': '31801 Hydrogeology, Hydrology, Limnology, Urban Water Management, Water Chemistry, Integrated Water Resources Management'},
{'subjectScheme': 'DFG',
'subjectName': '34 Geosciences (including Geography)'}]

Get lists of repositories

It is possible to get lists of results from re3data. However keep in mind that lists consist of Repository objects with very few metadata (id, name, doi, link).

Get all repositories:

Repositories().get()

For lists of repositories, you can also count the number of records found instead of returning the results. This also works for search queries and filters.

Repositories().count()
# 3137

Filter and query records

Re3data makes use of filters and queries. Filters can be used to slice the structured metadata of re3data and queries can be used to search for specific terms or phrases. Both filters and queries can be used in one request.

An overview of all the filters can be found under "Beta" in the REST API documentation. It can be hard to find the correct values sometimes. In that case, look for values in other single Repository requests, the Metadata Schema, or the website.

(
Repositories()
.filter(countries="CAN")
.filter(subjects=["2 Life Sciences", "3 Natural Sciences"])
.filter(pidSystems="DOI")
.query("University")
.get()
)

which is identical to:

(
Repositories()
.filter(
countries="CAN",
subjects=["2 Life Sciences", "3 Natural Sciences"],
pidSystems="DOI",
)
.query("University")
.get()
)

Code snippets

A list of examples for the re3data.org dataset.

Get repositories running Dataverse software

(
Repositories()
.filter(software="Dataverse")
.get()
)

Get repositories with word "climate" and DOI identifiers

(
Repositories()
.filter(pidSystems="DOI")
.query("climate")
.get()
)

Data dump

The following code dumps all data of re3data.org into a list of dicts. The following code can take a while to run because of the structure of the re3data API.

frompy3dataimportRepositoriesall_data= [Repositories()[x["id"]] forxinRepositories().get()]

License

MIT

Contact

This library is a community contribution. The authors of this Python library aren't affiliated with re3data.

Feel free to reach out with questions, remarks, and suggestions. The issue tracker is a good starting point. You can also email me at jonathandebruinos@gmail.com.

About

A flexible and lightweight Python interface to the re3data.org database

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

py3data

PyPIDOI

py3data is a Python library for re3data registry. Re3data is a global registry of research data repositories that covers research data repositories from different academic disciplines. It includes repositories that enable permanent storage of and access to data sets to researchers, funding bodies, publishers, and scholarly institutions. Re3data offers an open and free REST API. py3data is a lightweight and thin Python interface to the beta version of this API.

The following features of re3data are currently supported by py3data:

  • Get single repositories
  • Filter and query repositories

Key features

  • Pipe operations - py3data can handle multiple operations in a sequence. This allows the developer to write understandable queries. For examples, see code snippets.
  • JSON support - Re3data doesn't offer a JSON implementation of the REST API. py3data parses the XML REST API and offers it in Python dict-like objects.
  • Schema fixes - The re3data Schema is slightly hard to parse in Python directly. Re3data makes is very easy to parse the API and solves the issues.
  • Permissive license - Re3data data is CC0 licensed 🙌. py3data is published under the MIT license.

Installation

py3data requires Python 3.8 or later.

pip install py3data

Getting started

frompy3dataimportRepositories

Get single repository

Get a single Repository

Repositories()["r3d100011986"]

The result is a Repository object, which is very similar to a dictionary. Find the available fields with .keys().

For example, get the open access status:

Repositories()["r3d100011986"]["subjects"]
[{'subjectScheme': 'DFG', 'subjectName': '2 Life Sciences'},
{'subjectScheme': 'DFG', 'subjectName': '202 Plant Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '20202 Plant Ecology and Ecosystem Analysis'},
{'subjectScheme': 'DFG',
'subjectName': '20203 Inter-organismic Interactions of Plants'},
{'subjectScheme': 'DFG', 'subjectName': '203 Zoology'},
{'subjectScheme': 'DFG',
'subjectName': '20303 Animal Ecology, Biodiversity and Ecosystem Research'},
{'subjectScheme': 'DFG', 'subjectName': '21 Biology'},
{'subjectScheme': 'DFG', 'subjectName': '3 Natural Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '313 Atmospheric Science and Oceanography'},
{'subjectScheme': 'DFG', 'subjectName': '318 Water Research'},
{'subjectScheme': 'DFG',
'subjectName': '31801 Hydrogeology, Hydrology, Limnology, Urban Water Management, Water Chemistry, Integrated Water Resources Management'},
{'subjectScheme': 'DFG',
'subjectName': '34 Geosciences (including Geography)'}]

Get lists of repositories

It is possible to get lists of results from re3data. However keep in mind that lists consist of Repository objects with very few metadata (id, name, doi, link).

Get all repositories:

Repositories().get()

For lists of repositories, you can also count the number of records found instead of returning the results. This also works for search queries and filters.

Repositories().count()
# 3137

Filter and query records

Re3data makes use of filters and queries. Filters can be used to slice the structured metadata of re3data and queries can be used to search for specific terms or phrases. Both filters and queries can be used in one request.

An overview of all the filters can be found under "Beta" in the REST API documentation. It can be hard to find the correct values sometimes. In that case, look for values in other single Repository requests, the Metadata Schema, or the website.

(
Repositories()
.filter(countries="CAN")
.filter(subjects=["2 Life Sciences", "3 Natural Sciences"])
.filter(pidSystems="DOI")
.query("University")
.get()
)

which is identical to:

(
Repositories()
.filter(
countries="CAN",
subjects=["2 Life Sciences", "3 Natural Sciences"],
pidSystems="DOI",
)
.query("University")
.get()
)

Code snippets

A list of examples for the re3data.org dataset.

Get repositories running Dataverse software

(
Repositories()
.filter(software="Dataverse")
.get()
)

Get repositories with word "climate" and DOI identifiers

(
Repositories()
.filter(pidSystems="DOI")
.query("climate")
.get()
)

Data dump

The following code dumps all data of re3data.org into a list of dicts. The following code can take a while to run because of the structure of the re3data API.

frompy3dataimportRepositoriesall_data= [Repositories()[x["id"]] forxinRepositories().get()]

License

MIT

Contact

This library is a community contribution. The authors of this Python library aren't affiliated with re3data.

Feel free to reach out with questions, remarks, and suggestions. The issue tracker is a good starting point. You can also email me at jonathandebruinos@gmail.com.

About

A flexible and lightweight Python interface to the re3data.org database

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

py3data

PyPIDOI

py3data is a Python library for re3data registry. Re3data is a global registry of research data repositories that covers research data repositories from different academic disciplines. It includes repositories that enable permanent storage of and access to data sets to researchers, funding bodies, publishers, and scholarly institutions. Re3data offers an open and free REST API. py3data is a lightweight and thin Python interface to the beta version of this API.

The following features of re3data are currently supported by py3data:

  • Get single repositories
  • Filter and query repositories

Key features

  • Pipe operations - py3data can handle multiple operations in a sequence. This allows the developer to write understandable queries. For examples, see code snippets.
  • JSON support - Re3data doesn't offer a JSON implementation of the REST API. py3data parses the XML REST API and offers it in Python dict-like objects.
  • Schema fixes - The re3data Schema is slightly hard to parse in Python directly. Re3data makes is very easy to parse the API and solves the issues.
  • Permissive license - Re3data data is CC0 licensed 🙌. py3data is published under the MIT license.

Installation

py3data requires Python 3.8 or later.

pip install py3data

Getting started

frompy3dataimportRepositories

Get single repository

Get a single Repository

Repositories()["r3d100011986"]

The result is a Repository object, which is very similar to a dictionary. Find the available fields with .keys().

For example, get the open access status:

Repositories()["r3d100011986"]["subjects"]
[{'subjectScheme': 'DFG', 'subjectName': '2 Life Sciences'},
{'subjectScheme': 'DFG', 'subjectName': '202 Plant Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '20202 Plant Ecology and Ecosystem Analysis'},
{'subjectScheme': 'DFG',
'subjectName': '20203 Inter-organismic Interactions of Plants'},
{'subjectScheme': 'DFG', 'subjectName': '203 Zoology'},
{'subjectScheme': 'DFG',
'subjectName': '20303 Animal Ecology, Biodiversity and Ecosystem Research'},
{'subjectScheme': 'DFG', 'subjectName': '21 Biology'},
{'subjectScheme': 'DFG', 'subjectName': '3 Natural Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '313 Atmospheric Science and Oceanography'},
{'subjectScheme': 'DFG', 'subjectName': '318 Water Research'},
{'subjectScheme': 'DFG',
'subjectName': '31801 Hydrogeology, Hydrology, Limnology, Urban Water Management, Water Chemistry, Integrated Water Resources Management'},
{'subjectScheme': 'DFG',
'subjectName': '34 Geosciences (including Geography)'}]

Get lists of repositories

It is possible to get lists of results from re3data. However keep in mind that lists consist of Repository objects with very few metadata (id, name, doi, link).

Get all repositories:

Repositories().get()

For lists of repositories, you can also count the number of records found instead of returning the results. This also works for search queries and filters.

Repositories().count()
# 3137

Filter and query records

Re3data makes use of filters and queries. Filters can be used to slice the structured metadata of re3data and queries can be used to search for specific terms or phrases. Both filters and queries can be used in one request.

An overview of all the filters can be found under "Beta" in the REST API documentation. It can be hard to find the correct values sometimes. In that case, look for values in other single Repository requests, the Metadata Schema, or the website.

(
Repositories()
.filter(countries="CAN")
.filter(subjects=["2 Life Sciences", "3 Natural Sciences"])
.filter(pidSystems="DOI")
.query("University")
.get()
)

which is identical to:

(
Repositories()
.filter(
countries="CAN",
subjects=["2 Life Sciences", "3 Natural Sciences"],
pidSystems="DOI",
)
.query("University")
.get()
)

Code snippets

A list of examples for the re3data.org dataset.

Get repositories running Dataverse software

(
Repositories()
.filter(software="Dataverse")
.get()
)

Get repositories with word "climate" and DOI identifiers

(
Repositories()
.filter(pidSystems="DOI")
.query("climate")
.get()
)

Data dump

The following code dumps all data of re3data.org into a list of dicts. The following code can take a while to run because of the structure of the re3data API.

frompy3dataimportRepositoriesall_data= [Repositories()[x["id"]] forxinRepositories().get()]

License

MIT

Contact

This library is a community contribution. The authors of this Python library aren't affiliated with re3data.

Feel free to reach out with questions, remarks, and suggestions. The issue tracker is a good starting point. You can also email me at jonathandebruinos@gmail.com.

About

A flexible and lightweight Python interface to the re3data.org database

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

py3data

PyPIDOI

py3data is a Python library for re3data registry. Re3data is a global registry of research data repositories that covers research data repositories from different academic disciplines. It includes repositories that enable permanent storage of and access to data sets to researchers, funding bodies, publishers, and scholarly institutions. Re3data offers an open and free REST API. py3data is a lightweight and thin Python interface to the beta version of this API.

The following features of re3data are currently supported by py3data:

  • Get single repositories
  • Filter and query repositories

Key features

  • Pipe operations - py3data can handle multiple operations in a sequence. This allows the developer to write understandable queries. For examples, see code snippets.
  • JSON support - Re3data doesn't offer a JSON implementation of the REST API. py3data parses the XML REST API and offers it in Python dict-like objects.
  • Schema fixes - The re3data Schema is slightly hard to parse in Python directly. Re3data makes is very easy to parse the API and solves the issues.
  • Permissive license - Re3data data is CC0 licensed 🙌. py3data is published under the MIT license.

Installation

py3data requires Python 3.8 or later.

pip install py3data

Getting started

frompy3dataimportRepositories

Get single repository

Get a single Repository

Repositories()["r3d100011986"]

The result is a Repository object, which is very similar to a dictionary. Find the available fields with .keys().

For example, get the open access status:

Repositories()["r3d100011986"]["subjects"]
[{'subjectScheme': 'DFG', 'subjectName': '2 Life Sciences'},
{'subjectScheme': 'DFG', 'subjectName': '202 Plant Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '20202 Plant Ecology and Ecosystem Analysis'},
{'subjectScheme': 'DFG',
'subjectName': '20203 Inter-organismic Interactions of Plants'},
{'subjectScheme': 'DFG', 'subjectName': '203 Zoology'},
{'subjectScheme': 'DFG',
'subjectName': '20303 Animal Ecology, Biodiversity and Ecosystem Research'},
{'subjectScheme': 'DFG', 'subjectName': '21 Biology'},
{'subjectScheme': 'DFG', 'subjectName': '3 Natural Sciences'},
{'subjectScheme': 'DFG',
'subjectName': '313 Atmospheric Science and Oceanography'},
{'subjectScheme': 'DFG', 'subjectName': '318 Water Research'},
{'subjectScheme': 'DFG',
'subjectName': '31801 Hydrogeology, Hydrology, Limnology, Urban Water Management, Water Chemistry, Integrated Water Resources Management'},
{'subjectScheme': 'DFG',
'subjectName': '34 Geosciences (including Geography)'}]

Get lists of repositories

It is possible to get lists of results from re3data. However keep in mind that lists consist of Repository objects with very few metadata (id, name, doi, link).

Get all repositories:

Repositories().get()

For lists of repositories, you can also count the number of records found instead of returning the results. This also works for search queries and filters.

Repositories().count()
# 3137

Filter and query records

Re3data makes use of filters and queries. Filters can be used to slice the structured metadata of re3data and queries can be used to search for specific terms or phrases. Both filters and queries can be used in one request.

An overview of all the filters can be found under "Beta" in the REST API documentation. It can be hard to find the correct values sometimes. In that case, look for values in other single Repository requests, the Metadata Schema, or the website.

(
Repositories()
.filter(countries="CAN")
.filter(subjects=["2 Life Sciences", "3 Natural Sciences"])
.filter(pidSystems="DOI")
.query("University")
.get()
)

which is identical to:

(
Repositories()
.filter(
countries="CAN",
subjects=["2 Life Sciences", "3 Natural Sciences"],
pidSystems="DOI",
)
.query("University")
.get()
)

Code snippets

A list of examples for the re3data.org dataset.

Get repositories running Dataverse software

(
Repositories()
.filter(software="Dataverse")
.get()
)

Get repositories with word "climate" and DOI identifiers

(
Repositories()
.filter(pidSystems="DOI")
.query("climate")
.get()
)

Data dump

The following code dumps all data of re3data.org into a list of dicts. The following code can take a while to run because of the structure of the re3data API.

frompy3dataimportRepositoriesall_data= [Repositories()[x["id"]] forxinRepositories().get()]

License

MIT

Contact

This library is a community contribution. The authors of this Python library aren't affiliated with re3data.

Feel free to reach out with questions, remarks, and suggestions. The issue tracker is a good starting point. You can also email me at jonathandebruinos@gmail.com.

About

A flexible and lightweight Python interface to the re3data.org database

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages