aiidateam / aiida-registry Goto Github PK
View Code? Open in Web Editor NEWFind plugins for AiiDA
Home Page: http://aiidateam.github.io/aiida-registry
License: Other
Find plugins for AiiDA
Home Page: http://aiidateam.github.io/aiida-registry
License: Other
make_pages.py no longer actually prepares the html version (this code has already been removed).
Its job is now to call fetch_metadata
and write the results to a json file.
the html
cli command should be removed
if
add --pre
to the pip install instructions.
With PR #88 we arrive at a point where keeping things in a single "script" starts to become problematic.
issue #90 also calls for modularization since it means that the "installation test" will need access to the metadata from the setup.json
files.
I propose the following changes:
make_ghpages/
to aiida_registry
Mentioning @giovannipizzi in case of comments
As discussed in #201, it is best practice for package releases to upload both a source distribution and wheel (https://www.python.org/dev/peps/pep-0491/) to pypi.
Packages using setuptools should now be using python -m build
(See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html)
We have aiidateam/aiida-core-with-services
docker stack that shipped with new aiida-core release that has the latest version of aiiida-core. When it is released, adopt it in the installation test command.
What are the rules and requirements regarding the uniqueness of entry points for registered plugins. Let me describe a use case to illustrate the point. Currently we have the QE plugin:
"quantumespresso": {
"name": "aiida-quantumespresso",
"entry_point": "quantumespresso",
},
One of the calculations coming with this plugin is of course quantumespresso.pw:PwCalculation.
Now I am currently writing a plugin that effectively extends the functionality of the basic Quantum ESPREESO plugin called aiida-quantumespresso-uscf
, which just like a quantumespresso.ph:PhCalculation
continues from a PwCalculation
. Semantically then, it makes sense to place this extension calculation at the entry point quantumespresso.uscf:UscfCalculation
.
The question is now if this is allowed or would to namespace issues.
I would think at least in principle, that at least as none of the entry points of the extension plugin clash with those of the base plugin, there should not be a problem. To verify uniquess, we might only have to adapt the format of the registry's json to include a map of all the entry points, just as is defined in the plugin's setup.json
. That is maybe we should have a plugins.json
that looks something like:
"quantumespresso": {
"name": "aiida-quantumespresso",
"entry_points": {
"aiida.calculations": [
"quantumespresso.ph = aiida_quantumespresso.calculations.ph:PhCalculation",
"quantumespresso.pw = aiida_quantumespresso.calculations.pw:PwCalculation"
]
}
},
"quantumespresso-uscf": {
"name": "aiida-quantumespresso-uscf",
"entry_points": {
"aiida.calculations": [
"quantumespresso.uscf = aiida_quantumespresso_uscf.calculations.uscf:UscfCalculation"
]
}
}
UI polishing need to happened before the final release of the new registry page. @AhmedBasem20
We keep this list and focus on things in a dedicate PR. Please keep this list update with more new requirement on UI.
for the materialscloud/work section (and in general, it would be nice to have a dedicated logo for the AiiDA registry).
@giovannipizzi suggested something with puzzle pieces (using the AiiDA colors); I think that's great idea
Also:
so far I've added support just for the ones we were already using
to add svgs + descriptions for the remaining ones here
aiida-registry/aiida_registry/__init__.py
Lines 91 to 104 in 6333221
for svgs use shields.io, e.g. https://img.shields.io/badge/status-planning-d9644d.svg
see #300 (comment)
After #261, I find a problem when I search for "aiida", the result page shows:
It not clear to me where those non-highlighted entry points come from, there is no "aiida" is these entry point names.
We currently have workflow task that posts comments on PRs about registry issues with plugins (see below).
Historically this has not been particularly effective (I don't have evidence of PR authors really looking at it), especially since there was no way to filter out the info on the specific plugin that was being edited/added.
Instead of displaying the entirety of the output in a comment, now that we have preview builds of the web sites on PRs it would be much more useful to store this information in the JSON file we build up and integrate it into the web site and display it there, e.g. in a subsection "Registry warnings" of the detail page of a plugin.
Potential issues in retrieved plugin metadata (ignore those for plugins not managed by you)
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-QECpWorkChain]
WARNING! Missing classifier 'Framework :: AiiDA' [aiida-aenet]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-aenet]
WARNING! Missing classifier 'Framework :: AiiDA' [aiida-alloy]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-alloy]
WARNING! Entry point 'elastic' does not start with prefix 'alloy.' [aiida-alloy]
WARNING! Missing classifier 'Framework :: AiiDA' [aiida-autocas]
WARNING! No bdist_wheel available for PyPI release [aiida-bands-inspect]
WARNING! AiiDA version not found [aiida-bands-inspect]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-bigdft]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-castep]
WARNING! No bdist_wheel available for PyPI release [aiida-catmat]
WARNING! AiiDA version not found [aiida-catmat]
WARNING! Missing classifier 'Framework :: AiiDA' [aiida-catmat]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-catmat]
WARNING! Entry point 'vasp_base_parser' does not start with prefix 'catmat.' [aiida-catmat]
WARNING! Entry point 'vasp.base' does not start with prefix 'catmat.' [aiida-catmat]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-ce]
WARNING! No bdist_wheel available for PyPI release [aiida-champ]
WARNING! AiiDA version not found [aiida-champ]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-champ]
WARNING! Entry point 'CHAMP' does not start with prefix 'champ.' [aiida-champ]
WARNING! Entry point 'CHAMP' does not start with prefix 'champ.' [aiida-champ]
WARNING! Entry point 'CHAMP' does not start with prefix 'champ.' [aiida-champ]
WARNING! Entry point 'CHAMP' does not start with prefix 'champ.' [aiida-champ]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-core]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-crystal-dft]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-crystal17]
WARNING! Entry point 'potcar' does not start with prefix 'cusp.' [aiida-cusp]
WARNING! > WARNING! Unable to retrieve plugin info from: https://raw.githubusercontent.com/lsmo-epfl/aiida-ddec/master/setup.json [aiida-ddec]
WARNING! AiiDA version not found [aiida-ddec]
WARNING! Development status in classifiers (alpha) does not match development_status in metadata (stable) [aiida-diff]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-diff]
WARNING! Cannot fetch all data from PyPI and missing plugin_info key! [aiida-dynamic-workflows]
WARNING! AiiDA version not found [aiida-dynamic-workflows]
WARNING! > WARNING! Unable to retrieve plugin info from: https://raw.github.com/environ-developers/aiida-environ/master/setup.json [aiida-environ]
WARNING! AiiDA version not found [aiida-environ]
WARNING! Cannot fetch all data from PyPI and missing plugin_info key! [aiida-eon]
WARNING! AiiDA version not found [aiida-eon]
WARNING! Cannot fetch all data from PyPI and missing plugin_info key! [aiida-eonclient]
WARNING! AiiDA version not found [aiida-eonclient]
WARNING! > WARNING! Unable to retrieve plugin info from: https://raw.github.com/sphuber/aiida-fenics/master/setup.json [aiida-fenics]
WARNING! AiiDA version not found [aiida-fenics]
WARNING! AiiDA version not found [aiida-fireworks-scheduler]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-fireworks-scheduler]
WARNING! Entry point 'fireworks' does not start with prefix 'fireworks_scheduler.' [aiida-fireworks-scheduler]
WARNING! Entry point 'fireworks-scheduler' does not start with prefix 'fireworks_scheduler.' [aiida-fireworks-scheduler]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-fleur]
WARNING! Prefix 'gaussian' does not follow naming convention. [aiida-gaussian-datatypes]
WARNING! Unable to read wheel file from PyPI release: No entry_points.txt found in wheel [aiida-graphql]
WARNING! Missing classifier 'Framework :: AiiDA' [aiida-graphql]
WARNING! Entry point 'genericMD' does not start with prefix 'gromacs.' [aiida-gromacs]
WARNING! Entry point 'genericMD' does not start with prefix 'gromacs.' [aiida-gromacs]
WARNING! Unable to read wheel file from PyPI release: No entry_points.txt found in wheel [aiida-grouppathx]
WARNING! Development status in classifiers (alpha) does not match development_status in metadata (beta) [aiida-grouppathx]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-grouppathx]
WARNING! Entry point 'gpx' does not start with prefix 'grouppathx.' [aiida-grouppathx]
WARNING! Missing classifier 'Framework :: AiiDA' [aiida-gudhi]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-gudhi]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-gulp]
WARNING! No bdist_wheel available for PyPI release [aiida-kkr]
WARNING! > WARNING! Unable to retrieve plugin info from: https://raw.github.com/JuDFTteam/aiida-kkr/develop/setup.json [aiida-kkr]
WARNING! AiiDA version not found [aiida-kkr]
WARNING! Development status in classifiers (beta) does not match development_status in metadata (stable) [aiida-kkr]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-kkr]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-lammps]
WARNING! Entry point 'dynaphopy' does not start with prefix 'lammps.' [aiida-lammps]
WARNING! Entry point 'dynaphopy' does not start with prefix 'lammps.' [aiida-lammps]
WARNING! Missing classifier 'Framework :: AiiDA' [aiida-lsmo]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-lsmo]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-metavo-scheduler]
WARNING! Entry point 'sshmetavo' does not start with prefix 'metavo_scheduler.' [aiida-metavo-scheduler]
WARNING! Entry point 'pbsprometavo' does not start with prefix 'metavo_scheduler.' [aiida-metavo-scheduler]
WARNING! Entry point 'sshmetavo' does not start with prefix 'metavo_scheduler.' [aiida-metavo-scheduler]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-mpds]
WARNING! Entry point 'crystal.mpds' does not start with prefix 'mpds.' [aiida-mpds]
WARNING! Entry point 'crystal.cif' does not start with prefix 'mpds.' [aiida-mpds]
WARNING! Entry point 'crystal.aiida' does not start with prefix 'mpds.' [aiida-mpds]
WARNING! > WARNING! Unable to retrieve plugin info from: https://raw.githubusercontent.com/nanotech-empa/aiida-nanotech-empa/master/setup.json [aiida-nanotech-empa]
WARNING! AiiDA version not found [aiida-nanotech-empa]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-nanotech-empa]
WARNING! > WARNING! Unable to retrieve plugin info from: https://raw.githubusercontent.com/atztogo/aiida-nims-scheduler/master/setup.json [aiida-nims-scheduler]
WARNING! AiiDA version not found [aiida-nims-scheduler]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-nims-scheduler]
WARNING! Prefix 'quantumespresso.ocv' does not follow naming convention. [aiida-open_circuit_voltage]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-orca]
WARNING! Missing classifier 'Framework :: AiiDA' [aiida-phtools]
WARNING! No bdist_wheel available for PyPI release [aiida-porousmaterials]
WARNING! AiiDA version not found [aiida-porousmaterials]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-porousmaterials]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-psi4]
WARNING! Cannot fetch all data from PyPI and missing plugin_info key! [aiida-python]
WARNING! AiiDA version not found [aiida-python]
WARNING! Prefix 'aiidapython' does not follow naming convention. [aiida-python]
WARNING! Missing classifier 'Framework :: AiiDA' [aiida-qeq]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-qeq]
WARNING! No bdist_wheel available for PyPI release [aiida-qp2]
WARNING! AiiDA version not found [aiida-qp2]
WARNING! Entry point 'noncollinearhydrogen' does not start with prefix 'quantumespresso.' [aiida-quantumespresso]
WARNING! Entry point 'spinorbithydrogen' does not start with prefix 'quantumespresso.' [aiida-quantumespresso]
WARNING! Missing classifier 'Framework :: AiiDA' [aiida-quantumespresso-hp]
WARNING! Prefix 'quantumespresso.hp' does not follow naming convention. [aiida-quantumespresso-hp]
WARNING! Prefix 'core' does not follow naming convention. [aiida-shell]
WARNING! No bdist_wheel available for PyPI release [aiida-siesta]
WARNING! > WARNING! Unable to retrieve plugin info from: https://raw.github.com/siesta-project/aiida_siesta_plugin/master/setup.json [aiida-siesta]
WARNING! No bdist_wheel available for PyPI release [aiida-spirit]
WARNING! AiiDA version not found [aiida-spirit]
WARNING! Cannot fetch all data from PyPI and missing plugin_info key! [aiida-ssh2win]
WARNING! AiiDA version not found [aiida-ssh2win]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-sshonly]
WARNING! Entry point 'ssh_only' does not start with prefix 'sshonly.' [aiida-sshonly]
WARNING! No bdist_wheel available for PyPI release [aiida-statefile-schedulers]
WARNING! AiiDA version not found [aiida-statefile-schedulers]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-statefile-schedulers]
WARNING! No bdist_wheel available for PyPI release [aiida-strain]
WARNING! AiiDA version not found [aiida-strain]
WARNING! Missing classifier 'Framework :: AiiDA' [aiida-supercell]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-supercell]
WARNING! No bdist_wheel available for PyPI release [aiida-symmetry-representation]
WARNING! AiiDA version not found [aiida-symmetry-representation]
WARNING! No bdist_wheel available for PyPI release [aiida-tbextraction]
WARNING! AiiDA version not found [aiida-tbextraction]
WARNING! No bdist_wheel available for PyPI release [aiida-tbmodels]
WARNING! AiiDA version not found [aiida-tbmodels]
WARNING! Missing classifier 'Framework :: AiiDA' [aiida-tcod]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-tcod]
WARNING! Entry point 'UppASD_core_calculations' does not start with prefix 'uppasd.' [aiida-uppasd]
WARNING! Entry point 'UppASD_core_parsers' does not start with prefix 'uppasd.' [aiida-uppasd]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-wannier90-workflows]
WARNING! Cannot fetch all data from PyPI and missing plugin_info key! [aiida-wien2k]
WARNING! AiiDA version not found [aiida-wien2k]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-yambo]
WARNING! AiiDA version not found [aiida-yascheduler]
WARNING! > WARNING! Unable to retrieve plugin info from: https://raw.githubusercontent.com/antimomarrazzo/aiida-z2pack/master/setup.json [aiida-z2pack]
WARNING! AiiDA version not found [aiida-z2pack]
WARNING! development_status key is deprecated. Use PyPI Trove classifiers in the plugin repository instead. [aiida-zeopp]
The detail page for each plugin should show a pip install ...
commandline that can be copy pasted to install the plugin (using the pip_url
key)
V2 will allow deploying PR previews from forks.
many setup.json
files will include the author_email
field (see e.g. here).
since one of the main purposes of the plugin registry is to connect prospective developers with existing developers, we should show the email, at least on the detail page
Now there is a string saying "Contains: 1 calculation, 2 parsers, ..."
The github workflow to have a daily build of the registry doesn't work yet:
To do:
pip install wheel
(see https://github.com/aiidateam/aiida-registry/runs/282357150#step:3:178)deploy.sh
depends on a travis secret)This is a suggestion for Nicola to consider presenting the list of plugins in a more relevant order than alphabetic sorting.
E.g. something like most recent release / number of downloads / ...
as mentioned in aiidalab/aiidalab#7, it would be helpful to
pipenv lock
on it to check for dependency conflicts#143 deals with the display ordering, but also it might be useful to consider adding instructions on where new plugins should be put in the json
file itself. Since it is clearly not ordered by alphabet perhaps mentioning that it is OK to add to the bottom will be sufficient.
registry should check only entry points defined in entry point groups defined by AiiDA.
See #97 (comment)
The aiida-registry
is now for users as well, the warnings shown in details may scare users out from using the plugin. The warnings were supposed to show to developers to fix the issues that are not proper in the plugin, thus should be more invisible to users.
The solution we agree after discuss with @khsrali is to not show the warnings one by one but fold it in an icon that show the number of warnings and can be unfolded to check the details.
For the errors, we keep it as it is with showing the long traceback since the error means the plugin has problem that either prevent user to use or the entrypoint information are not properly displayed. The errors are for developers to take the action ASAP.
add a linter that checks a few basic things
One way to do it is to take inspiration from
https://github.com/aiidateam/aiida-core/blob/5e02e164b589f9baec2521980ae006a061c76301/.github/workflows/ci.yml#L83-L95
aiida-registry html
script write the output like hereWe could use labels such as PyPI download statistics and moderated categories such as common-workflows
to better indicate the development and maintenance state of a plugin in the registry.
Related to #143 .
When new plugin is added to the plugins.yaml
, the preview CI will go through all plugins to test, which is time-consuming and hides the test output information among other plugins output.
The make_pages
can accept packages and only fetch and test install on those plugins. If we can ensure the new plugin is always added at the end of plugins.yaml
then we can get the plugin name and in CI only run the test for it.
There have been numerous cases of PRs adding new plugins failing because of JSON formatting issues (forgotten comma, forgotten braces, ...).
JSON isn't really meant to be edited by humans, so I propose to move from a plugins.json
to a plugins.yaml
file.
The programatically produced plugins_metadata.json
can of course still remain in json format.
Before I make any changes in this direction: @yakutovicha are you currently using the plugins.json
directly in the AiiDA lab or only the plugins_metadata.json
?
I.e. can I move forward with this without breaking anything on your side?
May be useful for people to get a more concrete idea of the kind of feature already available and working on the plugin.
if documentation url is provided but url does not exist, travis should fail
see #210 (running them locally works fine)
Once this is fixed, the information gathered this way can be used for a more detailed "workflow registry page"
it should be clearer from looking at a plugin whether it is "usable"
(e.g. use color scheme)
as of may 25th, 2020, all 49 registered plugin packages provide the code_home
variable.
I see no reason to keep it optional - if the case arises, we will reconsider
Tasks:
almost all plugins in the list follow the convention of aiida-new
having entry point prefix new
.
in those cases, the entry_point_prefix
key could be omitted.
with the automatic comment on new PRs, people will still be reminded when their entry points don't start with the right prefix.
anyhow; it's a minor thing
ok updated, when converting to GHA, we don't need that uglyKEYcheck
anymore. so i don't bring it here.
import yaml
import requests
from uglyKEYcheck import search_in_url
maindomain = "https://aiidateam.github.io/aiida-registry/"
def load_yaml_file(file_path):
with open(file_path, 'r') as file:
return yaml.safe_load(file)
def save_yaml_file(file_path, data):
with open(file_path, 'w') as file:
yaml.safe_dump(data, file, sort_keys=False)
def check_if_toml(url):
new_url = '/'.join(url.split('/')[:-1]) + '/pyproject.toml'
response = requests.head(new_url, timeout=10)
if response.status_code == 404:
return None
else:
return new_url
def check_urls(data):
updates = False
for plugin, info in data.items():
url = info.get("plugin_info")
if url:
try:
response = requests.get(url, allow_redirects=True)
if response.status_code == 404:
new_url = check_if_toml(url)
if new_url:
print(f"{plugin}: returned a 404 status. But *pyproject.toml* detected!")
if search_in_url(maindomain+plugin, 'W002'):
data[plugin]["plugin_info"] = new_url
updates = True
print(plugin, ' updated')
else:
print(f"{plugin}: returned a 404 status. No *pyproject.toml* detected.")
else:
pass
except requests.RequestException as e:
print(f"Error checking {plugin}: {url}. Error: {e}")
return updates
yaml_file_path = 'plugins.yaml'
data = load_yaml_file(yaml_file_path)
if check_urls(data):
save_yaml_file('plugins-out.yaml', data)
print("YAML file updated.")
Originally posted by @khsrali in #309 (comment)
Once aiida-core 1.0.0b1 is released, register it here
Now there are both travis and GitHub actions. Maybe we can migrate also the final things from travis to GitHub actions?
Setuptools provides the option use a setup.cfg
configuration file instead of specifying everything in setup.py
(documentation).
I think adding support for that would be pretty straightforward, using setuptools.config.read_configuration to parse the config.
Is there any interest in supporting this format? Remember, "PR welcome" is always a valid response 😉
@giovannipizzi: this is what it looks like for now (quite minimal): https://aiidateam.github.io/aiida-registry/
With the upcoming deprecation of python 2.7, does it make sense to add the information about which python versions a plugin supports? This information could be obtained from the Programming Language :: Python :: X
trove classifiers.
#190 starts parsing the actual trove classifier for the development status of the plugin - and, as expected, there are several cases where it does not agree with the development status registered at the registry level.
In order to move towards standardization & reduce duplication of information, I propose the following changes:
development_status
key at the registry level is deprecatedplanning
.Sounds good @chrisjsewell ?
code_home
is for the homepage of the code of the plugin (should be obvious because a plugin does not need to have anything to do with an external code).
TODO: code_home
must be changed to point to the plugin repo
People might want to use something else than setuptools
to manage their projects.
There are currently two popular alternatives using solely pyproject.toml
: Poetry and Flit.
Unfortunately pyproject.toml
does not have a standard dependency, entrypoint or trove classifier spec, which makes it build-system dependent.
Example for Poetry (tested except for the plugin part):
[tool.poetry]
name = "aiida-graphql"
version = "0.0.1"
description = "Strawberry-based GraphQL API Server for AiiDA"
authors = ["Tiziano Müller <[email protected]>"]
repository = "https://github.com/dev-zero/aiida-graphql"
license = "MIT"
classifiers = [
"Development Status :: 3 - Alpha",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Topic :: Software Development :: Libraries :: Python Modules",
"Intended Audience :: Science/Research",
]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.7"
aiida = "^1.0.0b6"
strawberry-graphql = "^0.16.5"
[tool.poetry.plugins."aiida.cmdline.data"]
"graphql-data" = "aiida_graphql.cli:some_data_cli_command"
Example for Flit (untested):
[tool.flit.metadata]
module = "aiida-graphql"
author = "Tiziano Müller"
author-email = "[email protected]"
home-page = "https://github.com/dev-zero/aiida-graphql"
license = "MIT"
classifiers = [
"Development Status :: 3 - Alpha",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Topic :: Software Development :: Libraries :: Python Modules",
"Intended Audience :: Science/Research",
]
description-file = "README.md"
requires =[
"aiida >=1.0.0b6 <1.1.0",
"strawberry-graphql >=0.16.5 <0.17"
]
requires-python = ">=3.7 <4"
[tool.flit.entrypoints."aiida.cmdline.data"]
"graphql-data" = "aiida_graphql.cli:some_data_cli_command"
What has to be implemented:
tomlkit
or pytoml
) based on file-type (if url contains pyproject.toml
use the toml parser, otherwise continue with loading it as json)It's three months that the action 'webpage' does not run anymore (as visible in the actions or in the last commit in the gh-pages
branch).
This should have been triggered both nightly and on push to master
.
@ltalirz any idea why? Did anything change on our side, or on GitHub's side?
Or some change in the syntax of the yml file (e.g. the conditional that checks that we're on the main repo)?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.