-
Notifications
You must be signed in to change notification settings - Fork 48
Improve interaction with probeinterface-library #364
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 4 commits
b064adc
fc4d1bf
11ddb96
ddabe5c
4f9315d
03f93f9
81968b8
965ccb0
9f0f893
d786a00
a98629b
b8f56c8
f1defdb
fa33982
4d20786
792a7e6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -18,6 +18,7 @@ classifiers = [ | |
| dependencies = [ | ||
| "numpy", | ||
| "packaging", | ||
| "requests" | ||
| ] | ||
|
|
||
| [project.urls] | ||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -13,6 +13,7 @@ | |||||||||||||||||||||
| import os | ||||||||||||||||||||||
| from pathlib import Path | ||||||||||||||||||||||
| from urllib.request import urlopen | ||||||||||||||||||||||
| import requests | ||||||||||||||||||||||
| from typing import Optional | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| from .io import read_probeinterface | ||||||||||||||||||||||
|
|
@@ -104,3 +105,82 @@ def get_probe(manufacturer: str, probe_name: str, name: Optional[str] = None) -> | |||||||||||||||||||||
| probe.name = name | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| return probe | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
|
|
||||||||||||||||||||||
| def get_manufacturers_in_library(tag=None) -> list[str]: | ||||||||||||||||||||||
| """ | ||||||||||||||||||||||
| Get the list of available manufacturers in the library | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| Returns | ||||||||||||||||||||||
| ------- | ||||||||||||||||||||||
| manufacturers : list of str | ||||||||||||||||||||||
| List of available manufacturers | ||||||||||||||||||||||
| """ | ||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. done |
||||||||||||||||||||||
| return list_github_folders("SpikeInterface", "probeinterface_library", ref=tag) | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
|
|
||||||||||||||||||||||
| def get_probes_in_library(manufacturer: str, tag=None) -> list[str]: | ||||||||||||||||||||||
alejoe91 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||||||||||||||||
| """ | ||||||||||||||||||||||
| Get the list of available probes for a given manufacturer | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| Parameters | ||||||||||||||||||||||
| ---------- | ||||||||||||||||||||||
| manufacturer : str | ||||||||||||||||||||||
| The probe manufacturer | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| Returns | ||||||||||||||||||||||
| ------- | ||||||||||||||||||||||
| probes : list of str | ||||||||||||||||||||||
| List of available probes for the given manufacturer | ||||||||||||||||||||||
| """ | ||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
I'd be keen for some better error messaging due to my own spelling errors...
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. and done |
||||||||||||||||||||||
| return list_github_folders("SpikeInterface", "probeinterface_library", path=manufacturer, ref=tag) | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
|
|
||||||||||||||||||||||
| def get_tags_in_library() -> list[str]: | ||||||||||||||||||||||
| """ | ||||||||||||||||||||||
| Get the list of available tags in the library | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| Returns | ||||||||||||||||||||||
| ------- | ||||||||||||||||||||||
| tags : list of str | ||||||||||||||||||||||
| List of available tags | ||||||||||||||||||||||
| """ | ||||||||||||||||||||||
| tags = get_all_tags("SpikeInterface", "probeinterface_library") | ||||||||||||||||||||||
| return tags | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
|
|
||||||||||||||||||||||
| ### UTILS | ||||||||||||||||||||||
| def get_all_tags(owner: str, repo: str, token: str = None): | ||||||||||||||||||||||
| """ | ||||||||||||||||||||||
| Get all tags for a repo. | ||||||||||||||||||||||
| Returns a list of tag names, or an empty list if no tags exist. | ||||||||||||||||||||||
| """ | ||||||||||||||||||||||
| url = f"https://api.github.com/repos/{owner}/{repo}/tags" | ||||||||||||||||||||||
| headers = {} | ||||||||||||||||||||||
| if token: | ||||||||||||||||||||||
| headers["Authorization"] = f"token {token}" | ||||||||||||||||||||||
| resp = requests.get(url, headers=headers) | ||||||||||||||||||||||
| if resp.status_code != 200: | ||||||||||||||||||||||
| raise RuntimeError(f"GitHub API returned {resp.status_code}: {resp.text}") | ||||||||||||||||||||||
| tags = resp.json() | ||||||||||||||||||||||
| return [tag["name"] for tag in tags] | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
|
|
||||||||||||||||||||||
| def list_github_folders(owner: str, repo: str, path: str = "", ref: str = None, token: str = None): | ||||||||||||||||||||||
| """ | ||||||||||||||||||||||
| Return a list of directory names in the given repo at the specified path. | ||||||||||||||||||||||
| You can pass a branch, tag, or commit SHA via `ref`. | ||||||||||||||||||||||
| If token is provided, use it for authenticated requests (higher rate limits). | ||||||||||||||||||||||
| """ | ||||||||||||||||||||||
| url = f"https://api.github.com/repos/{owner}/{repo}/contents/{path}" | ||||||||||||||||||||||
| params = {} | ||||||||||||||||||||||
| if ref: | ||||||||||||||||||||||
| params["ref"] = ref | ||||||||||||||||||||||
| headers = {} | ||||||||||||||||||||||
| if token: | ||||||||||||||||||||||
| headers["Authorization"] = f"token {token}" | ||||||||||||||||||||||
| resp = requests.get(url, headers=headers, params=params) | ||||||||||||||||||||||
| if resp.status_code != 200: | ||||||||||||||||||||||
| raise RuntimeError(f"GitHub API returned status {resp.status_code}: {resp.text}") | ||||||||||||||||||||||
| items = resp.json() | ||||||||||||||||||||||
| return [item["name"] for item in items if item.get("type") == "dir" and item["name"][0] != "."] | ||||||||||||||||||||||
Uh oh!
There was an error while loading. Please reload this page.