Experiments with Tox plugin system

Related tags

Miscellaneoustox
Overview

The project is an attempt to add to the tox some missing out of the box functionality.

Basically it is just an extension for the tool that will be loaded automatically.

Features

First experimental feature is to recreate virtual environment on requirements file update.

Installation

Thanks to entrypoints mechanism used by tox plugin system no additional configuration is required except of the package installation.

pip install tox-battery

Package Maintainance

Release

tox -e release
Comments
  • Custom naming for previous requirements hash file

    Custom naming for previous requirements hash file

    For some of my tox projects, I use a single virtualenv for all test commands. The config looks something like this:

    [tox]
    envlist = flake8, pylint, docs, unit
    
    [testenv]
    envdir = {toxworkdir}/env
    deps =
        -rrequirements-test.txt
    commands =
        flake8,lint,test: flake8
        pylint,lint,test: pylint
        docs: sphinx-build
        unit,test: pytest
    

    So even though I have different tox environments, they all share the same virtualenv.

    What I run into with tox-battery is that the initial tox build ends up recreating each tox env for a single run of $ tox because there doesn't exist a requirements.previous file yet for each of the envs. Subsequent runs are fine though. For my local dev side, this isn't too much of a problem; however, for CI servers, the build times are longer than they need to be due to the venv recreation since the CI build always starts with a fresh checkout.

    My question is whether you would consider having an option to name the previous requirements file based on the actual venv path instead of the tox env name or possibly a setting under the env configuration that explicitly defines the name used in previous requirements file. Something like:

    [testenv:flake8]
    # would be used to build filename "requirements.txt.{tox_battery_basename}.previous"
    tox_battery_basename = env
    
    [testenv:pylint]
    tox_battery_basename = env
    

    and maybe a global option which would apply to all envs unless they overwrote the value in the env specific config:

    [testenv]
    tox_battery_basename = env
    

    Thoughts? If you are open to this idea, I could submit a PR for it.

    Thanks!

    bug 
    opened by dgilland 5
  • Add support for nested requirements

    Add support for nested requirements

    This patch implements the support for nested requirements.

    The use case for this is when a project contains a requirements.txt file pointing to another requirements file (i.e.: production-requirements.txt) which also points to other requirement files.

    The patch achieves this by compiling the list of all the requirements, hashing it, and comparing this hash to the hash of the previous tox run (if any).

    opened by rgreinho 4
  • Migrate to tox-dev and v4 support

    Migrate to tox-dev and v4 support

    Hello, would you consider moving the project under the tox-dev umbrella? See documentation under https://tox.readthedocs.io/en/rewrite/plugins.html#adoption-of-a-plugin-under-tox-dev-github-organization

    Furthermore, tox v4 is getting ready and we'd like to make sure this plugin is supported from day 1, we're collecting feature gaps for this under https://github.com/tox-dev/tox/issues/1974. Would be great if you could join our development chat under https://discord.gg/tox so we can assist with this. If you do so please drop in a line in the #plugin chat with the name of the repository you maintain. Thanks!

    opened by gaborbernat 3
  • Random hash seeds break invocation with Python 3

    Random hash seeds break invocation with Python 3

    Python 3 uses a different default behavior for hash seeds than Python 2 (https://docs.python.org/3/using/cmdline.html#cmdoption-R). While with Python 2 the default is a static seed, with Python 3 it's a random one. That causes tox-battery under Python 3 to generate different seeds for multiple invocations, because of the use of the hash function in https://github.com/signalpillar/tox-battery/blob/master/toxbat/requirements.py#L101. That results in a re-creation of the environment, as the compared hashs always differ.

    A workaround is to set PYTHONHASHSEED=0 when running tox. That'll cause a static hash seed to be used for tox-battery, while still using a random one per test environment. A better solution would be of course to replace the hash function with something which returns deterministic results.

    opened by Dunedan 3
  • Parse error

    Parse error

    I have a project that has some pip flags in the requirements.txt (specifically --no-binary). I'd love to use this project, but I'm getting a parser error for the file. Specifically, it seems that using pkg_resources doesn't support parsing that option.

    bug 
    opened by wbyoung 3
  • Internal pip failure with pip==20.0.2

    Internal pip failure with pip==20.0.2

    I get this error on Appveyor on WIndows:

    Traceback (most recent call last):
      File "c:\python36-x64\lib\runpy.py", line 193, in _run_module_as_main
        "__main__", mod_spec)
      File "c:\python36-x64\lib\runpy.py", line 85, in _run_code
        exec(code, run_globals)
      File "C:\Python36-x64\Scripts\tox.exe\__main__.py", line 7, in <module>
      File "c:\python36-x64\lib\site-packages\tox\session\__init__.py", line 44, in cmdline
        main(args)
      File "c:\python36-x64\lib\site-packages\tox\session\__init__.py", line 64, in main
        config = load_config(args)
      File "c:\python36-x64\lib\site-packages\tox\session\__init__.py", line 80, in load_config
        config = parseconfig(args)
      File "c:\python36-x64\lib\site-packages\tox\config\__init__.py", line 252, in parseconfig
        pm = get_plugin_manager(plugins)
      File "c:\python36-x64\lib\site-packages\tox\config\__init__.py", line 71, in get_plugin_manager
        pm.load_setuptools_entrypoints("tox")
      File "c:\python36-x64\lib\site-packages\pluggy\manager.py", line 299, in load_setuptools_entrypoints
        plugin = ep.load()
      File "c:\python36-x64\lib\site-packages\importlib_metadata\__init__.py", line 94, in load
        module = import_module(match.group('module'))
      File "c:\python36-x64\lib\importlib\__init__.py", line 126, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "<frozen importlib._bootstrap>", line 994, in _gcd_import
      File "<frozen importlib._bootstrap>", line 971, in _find_and_load
      File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
      File "<frozen importlib._bootstrap_external>", line 678, in exec_module
      File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
      File "c:\python36-x64\lib\site-packages\toxbat\requirements.py", line 44, in <module>
        from pip._internal.download import PipSession
    ModuleNotFoundError: No module named 'pip._internal.download'
    

    But it doesn't happen on Travis. I'm not sure what the OS has to do with it, probably the ordering of installation?

    opened by nedbat 2
  • Doesn't work with pip 10

    Doesn't work with pip 10

    pip 10 was recently released, making some backwards-incompatible changes to internal APIs that tox-battery uses:

    $ tox
    Traceback (most recent call last):
      File "/home/travis/virtualenv/python2.7.14/bin/tox", line 11, in <module>
        sys.exit(cmdline())
      File "/home/travis/virtualenv/python2.7.14/lib/python2.7/site-packages/tox/session.py", line 39, in main
        config = prepare(args)
      File "/home/travis/virtualenv/python2.7.14/lib/python2.7/site-packages/tox/session.py", line 27, in prepare
        config = parseconfig(args)
      File "/home/travis/virtualenv/python2.7.14/lib/python2.7/site-packages/tox/config.py", line 205, in parseconfig
        pm = get_plugin_manager(plugins)
      File "/home/travis/virtualenv/python2.7.14/lib/python2.7/site-packages/tox/config.py", line 44, in get_plugin_manager
        pm.load_setuptools_entrypoints("tox")
      File "/home/travis/virtualenv/python2.7.14/lib/python2.7/site-packages/pluggy/__init__.py", line 397, in load_setuptools_entrypoints
        plugin = ep.load()
      File "/home/travis/virtualenv/python2.7.14/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2405, in load
        return self.resolve()
      File "/home/travis/virtualenv/python2.7.14/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2411, in resolve
        module = __import__(self.module_name, fromlist=['__name__'], level=0)
      File "/home/travis/virtualenv/python2.7.14/lib/python2.7/site-packages/toxbat/requirements.py", line 38, in <module>
        from pip.download import PipSession
    ImportError: No module named download
    

    pip-tools got around this by vendoring a copy of pip: https://github.com/jazzband/pip-tools/issues/580

    opened by jmbowman 2
  • Parser fails if comments are used in requirements.txt

    Parser fails if comments are used in requirements.txt

    The requirements.txt starts with:

    #
    # This file is autogenerated by pip-compile
    # To update, run:
    #
    #    pip-compile --output-file requirements.txt requirements.in
    #
    
    argparse==1.2.1
    

    The traceback is:

    Traceback (most recent call last):
      File "/usr/local/bin/tox", line 11, in <module>
        sys.exit(cmdline())
      File "/usr/local/lib/python3.6/site-packages/tox/session.py", line 38, in main
        config = prepare(args)
      File "/usr/local/lib/python3.6/site-packages/tox/session.py", line 26, in prepare
        config = parseconfig(args)
      File "/usr/local/lib/python3.6/site-packages/tox/config.py", line 246, in parseconfig
        pm.hook.tox_configure(config=config)
      File "/usr/local/lib/python3.6/site-packages/pluggy.py", line 745, in __call__
        return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
      File "/usr/local/lib/python3.6/site-packages/pluggy.py", line 339, in _hookexec
        return self._inner_hookexec(hook, methods, kwargs)
      File "/usr/local/lib/python3.6/site-packages/pluggy.py", line 334, in <lambda>
        _MultiCall(methods, kwargs, hook.spec_opts).execute()
      File "/usr/local/lib/python3.6/site-packages/pluggy.py", line 614, in execute
        res = hook_impl.function(*args)
      File "/usr/local/lib/python3.6/site-packages/toxbat/requirements.py", line 38, in tox_configure
        return _ensure_envs_recreated_on_requirements_update(config)
      File "/usr/local/lib/python3.6/site-packages/toxbat/requirements.py", line 48, in _ensure_envs_recreated_on_requirements_update
        requires_recreation = are_requirements_changed(env)
      File "/usr/local/lib/python3.6/site-packages/toxbat/requirements.py", line 70, in are_requirements_changed
        for reqfile in requirement_files if reqfile and os.path.isfile(reqfile))
      File "/usr/local/lib/python3.6/site-packages/toxbat/requirements.py", line 70, in <genexpr>
        for reqfile in requirement_files if reqfile and os.path.isfile(reqfile))
      File "/usr/local/lib/python3.6/site-packages/toxbat/requirements.py", line 108, in is_changed
        previous_requirements_hash = int(content)
    ValueError: invalid literal for int() with base 10: '#\n# This file is autogenerated by pip-compile\n# To update, run:\n#\n#    pip-compile --output-file requirements.txt requirements.in\n#\n\nargparse==1.2.1\n…
    

    For now, it's possible to downgrade to tox-battery~=0.2.0 to work around this.

    bug 
    opened by underyx 2
  • Parser fails on

    Parser fails on "-r" in requirements file

    I have a project where tox.ini includes "-r{toxinidir}/requirements-test.txt", and requirements-test.txt includes "-r requirements.txt". When I try to run tox with tox-battery installed, I get the following error.

    Traceback (most recent call last):
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/_vendor/packaging/requirements.py", line 90, in __init__
        req = REQUIREMENT.parseString(requirement_string)
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/_vendor/pyparsing.py", line 1137, in parseString
        raise exc
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/_vendor/pyparsing.py", line 1127, in parseString
        loc, tokens = self._parse( instring, 0 )
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/_vendor/pyparsing.py", line 1001, in _parseNoCache
        loc,tokens = self.parseImpl( instring, preloc, doActions )
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/_vendor/pyparsing.py", line 2412, in parseImpl
        loc, exprtokens = e._parse( instring, loc, doActions )
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/_vendor/pyparsing.py", line 1001, in _parseNoCache
        loc,tokens = self.parseImpl( instring, preloc, doActions )
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/_vendor/pyparsing.py", line 2669, in parseImpl
        return self.expr._parse( instring, loc, doActions, callPreParse=False )
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/_vendor/pyparsing.py", line 1001, in _parseNoCache
        loc,tokens = self.parseImpl( instring, preloc, doActions )
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/_vendor/pyparsing.py", line 2395, in parseImpl
        loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/_vendor/pyparsing.py", line 1005, in _parseNoCache
        loc,tokens = self.parseImpl( instring, preloc, doActions )
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/_vendor/pyparsing.py", line 1785, in parseImpl
        raise ParseException(instring, loc, self.errmsg, self)
    pkg_resources._vendor.pyparsing.ParseException: Expected W:(abcd...) (at char 0), (line:1, col:1)
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/__init__.py", line 2788, in __init__
        super(Requirement, self).__init__(requirement_string)
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/_vendor/packaging/requirements.py", line 94, in __init__
        requirement_string[e.loc:e.loc + 8]))
    pkg_resources.extern.packaging.requirements.InvalidRequirement: Invalid requirement, parse error at "'-r requi'"
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/home/david/callisto/.venv/bin/tox", line 11, in <module>
        sys.exit(cmdline())
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/tox/session.py", line 38, in main
        config = prepare(args)
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/tox/session.py", line 26, in prepare
        config = parseconfig(args)
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/tox/config.py", line 236, in parseconfig
        pm.hook.tox_configure(config=config)
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pluggy.py", line 724, in __call__
        return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pluggy.py", line 338, in _hookexec
        return self._inner_hookexec(hook, methods, kwargs)
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pluggy.py", line 333, in <lambda>
        _MultiCall(methods, kwargs, hook.spec_opts).execute()
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pluggy.py", line 596, in execute
        res = hook_impl.function(*args)
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/toxbat/requirements.py", line 36, in tox_configure
        return _ensure_envs_recreated_on_requirements_update(config)
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/toxbat/requirements.py", line 46, in _ensure_envs_recreated_on_requirements_update
        requires_recreation = are_requirements_changed(env)
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/toxbat/requirements.py", line 69, in are_requirements_changed
        for reqfile in requirement_files
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/toxbat/requirements.py", line 70, in <genexpr>
        if reqfile and os.path.isfile(reqfile)
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/toxbat/requirements.py", line 89, in is_changed
        changed = not are_equal_requirement_files(fpath, prev_version_fpath)
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/toxbat/requirements.py", line 101, in are_equal_requirement_files
        reqs1 = sorted(parse_requirements(content_of(fpath1)), key=hash_cmp)
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/toxbat/requirements.py", line 111, in parse_requirements
        return list(pkg_resources.parse_requirements(file_content))
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/__init__.py", line 2781, in parse_requirements
        yield Requirement(line)
      File "/home/david/callisto/.venv/lib/python3.4/site-packages/pkg_resources/__init__.py", line 2790, in __init__
        raise RequirementParseError(str(e))
    pkg_resources.RequirementParseError: Invalid requirement, parse error at "'-r requi'"
    
    bug 
    opened by divergentdave 2
  • Handle None filenames when processing nested files

    Handle None filenames when processing nested files

    Because the tox deps list is mapped through the parse_requirements_fname function. Some values in the initial list can be none. Skip over those instead of throwing an error.

    opened by feanil 1
  • pip 20.1 causes internal error

    pip 20.1 causes internal error

    Looks like pip broke tox-battery again:

    Traceback (most recent call last):
      File "c:\python27-x64\lib\runpy.py", line 174, in _run_module_as_main
        "__main__", fname, loader, pkg_name)
      File "c:\python27-x64\lib\runpy.py", line 72, in _run_code
        exec code in run_globals
      File "C:\Python27-x64\Scripts\tox.exe\__main__.py", line 7, in <module>
      File "c:\python27-x64\lib\site-packages\tox\session\__init__.py", line 44, in cmdline
        main(args)
      File "c:\python27-x64\lib\site-packages\tox\session\__init__.py", line 64, in main
        config = load_config(args)
      File "c:\python27-x64\lib\site-packages\tox\session\__init__.py", line 80, in load_config
        config = parseconfig(args)
      File "c:\python27-x64\lib\site-packages\tox\config\__init__.py", line 267, in parseconfig
        pm.hook.tox_configure(config=config)  # post process config object
      File "c:\python27-x64\lib\site-packages\pluggy\hooks.py", line 286, in __call__
        return self._hookexec(self, self.get_hookimpls(), kwargs)
      File "c:\python27-x64\lib\site-packages\pluggy\manager.py", line 93, in _hookexec
        return self._inner_hookexec(hook, methods, kwargs)
      File "c:\python27-x64\lib\site-packages\pluggy\manager.py", line 87, in <lambda>
        firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
      File "c:\python27-x64\lib\site-packages\pluggy\callers.py", line 208, in _multicall
        return outcome.get_result()
      File "c:\python27-x64\lib\site-packages\pluggy\callers.py", line 81, in get_result
        _reraise(*ex)  # noqa
      File "c:\python27-x64\lib\site-packages\pluggy\callers.py", line 187, in _multicall
        res = hook_impl.function(*args)
      File "c:\python27-x64\lib\site-packages\toxbat\requirements.py", line 60, in tox_configure
        return _ensure_envs_recreated_on_requirements_update(config)
      File "c:\python27-x64\lib\site-packages\toxbat\requirements.py", line 72, in _ensure_envs_recreated_on_requirements_update
        requires_recreation = are_requirements_changed(env)
      File "c:\python27-x64\lib\site-packages\toxbat\requirements.py", line 96, in are_requirements_changed
        if reqfile and os.path.isfile(reqfile)])
      File "c:\python27-x64\lib\site-packages\toxbat\requirements.py", line 126, in is_changed
        new_requirements = parse_pip_requirements(fpath)
      File "c:\python27-x64\lib\site-packages\toxbat\requirements.py", line 109, in parse_pip_requirements
        session=PipSession())
      File "c:\python27-x64\lib\site-packages\toxbat\requirements.py", line 110, in <genexpr>
        if r.req
    AttributeError: 'ParsedRequirement' object has no attribute 'req'
    
    opened by nedbat 1
  • Handle `--requirement` argument, not just `-r`

    Handle `--requirement` argument, not just `-r`

    https://github.com/signalpillar/tox-battery/blob/110c931c4cb7b803f2637f8f4a0feae1593f5522/toxbat/requirements.py#L158-L160

    is great, but doesn't handle the long-form option:

    [testenv:test]
    deps =
        --no-deps
        --requirement deps/test.txt
    

    This would be a good issue for someone to handle for Hacktoberfest 😄

    opened by Zac-HD 2
  • any reason for not fixing requirement refresh in tox itself?

    any reason for not fixing requirement refresh in tox itself?

    I would like to know if there are any reasons for adding this outside tox itself? To me this looks like a product bug that needs to be fixed.

    The correct bug seems to be https://github.com/tox-dev/tox/issues/149

    opened by ssbarnea 3
  • Consider egg-info/requires.txt when determining requirements hash

    Consider egg-info/requires.txt when determining requirements hash

    Consider the scenario where install_requires changes in setup.py but isn't reflected in any requirements file (e.g. maybe the requirements file only lists test dependencies and package dependencies only exist in setup.py).

    Currently, this does not trigger a venv recreate since tox-battery only checks deps defined in tox.ini, and tox itself doesn't trigger a recreate either in this case (at least in my initial testing I didn't see this). This can result in reusing a venv with an old dependency installed from setup.py.

    What if tox-battery used those dependencies in addition to the ones in the requirements files to generate its requirements hash? It's possible to parse the contents of <pkgname>.egg-info/requires.txt to get a list of dependencies defined in setup.py so that approach may work in most cases.

    Thoughts?

    enhancement 
    opened by dgilland 5
Releases(0.4)
Owner
Volodymyr Vitvitskyi
Volodymyr Vitvitskyi
GEGVL: Google Earth Based Geoscience Video Library

Google Earth Based Geoscience Video Library is transforming to Server Based. The

3 Feb 11, 2022
Learn to code in any language. If

Learn to Code It is an intiiative undertaken by Student Ambassadors Club, Jamshoro for students who are absolute begineers in programming and want to

Student Ambassadors' Club at Mehran UET 15 Oct 19, 2022
Python / C++ based particle reaction-diffusion simulator

ReaDDy (Reaction Diffusion Dynamics) is an open source particle based reaction-diffusion simulator that can be configured and run via Python. Currentl

ReaDDy 46 Dec 09, 2022
This repo presents you the official code of "VISTA: Boosting 3D Object Detection via Dual Cross-VIew SpaTial Attention"

VISTA VISTA: Boosting 3D Object Detection via Dual Cross-VIew SpaTial Attention Shengheng Deng, Zhihao Liang, Lin Sun and Kui Jia* (*) Corresponding a

104 Dec 29, 2022
E5 自动续期

请选择跳转 新版本系统 (2021-2-9采用): 以后更新都在AutoApi,采用v0.0版本号覆盖式更新 AutoApi : 最新版 保留1到2个稳定的简易版,防止萌新大范围报错 AutoApi'X' : 稳定版1 ( 即本版AutpApiP ) AutoApiP ( 即v5.0,稳定版 ) —

95 Feb 15, 2021
urlwatch is intended to help you watch changes in webpages and get notified of any changes.

urlwatch is intended to help you watch changes in webpages and get notified (via e-mail, in your terminal or through various third party services) of any changes.

Thomas Perl 2.5k Jan 08, 2023
Adansons Base is a data management tool that organizes metadata of unstructured data and creates and organizes datasets.

Adansons Base is a data management tool that organizes metadata of unstructured data and creates and organizes datasets. It makes dataset creation more effective and helps find essential insights fro

Adansons Inc 27 Oct 22, 2022
Mmr image postbot - Бот для создания изображений с новыми релизами в сообщество ВК MMR Aggregator

Mmr image postbot - Бот для создания изображений с новыми релизами в сообщество ВК MMR Aggregator

Max 3 Jan 07, 2022
Boamp-extractor - Script d'extraction des AOs publiés au BOAMP

BOAMP Extractor BOAMP-Extractor permet d'extraire les offres de marchés publics publiées au bulletin officiel des annonces des marchés publics (BOAMP)

Julien 3 Dec 09, 2022
Darkflame Universe Account Manager

Darkflame Universe Account Manager This is a quick and simple web application intended for account creation and management for a DLU instance created

31 Nov 29, 2022
Analisador de strings feito em Python // String parser made in Python

Este é um analisador feito em Python, neste programa, estou estudando funções e a sua junção com "if's" e dados colocados pelo usuário. Neste código,

Dev Nasser 1 Nov 03, 2021
This is an example manipulation package of for a robot manipulator based on Drake with ROS2.

This is an example manipulation package of for a robot manipulator based on Drake with ROS2.

Sotaro Katayama 1 Oct 21, 2021
Context-free grammar to Sublime-syntax file

Generate a sublime-syntax file from a non-left-recursive, follow-determined, context-free grammar

Haggai Nuchi 8 Nov 17, 2022
Snack Rice - A Rice University servery finder, customized for your needs!

Snack Rice - A Rice University servery finder, customized for your needs!

Aidan Gerber 3 Sep 25, 2022
Recreating my first CRUD in python, but now more professional

Recreating my first CRUD in python, but now more professional

Ricardo Deo Sipione Augusto 2 Nov 27, 2021
Python bindings for `ign-msgs` and `ign-transport`

Python Ignition This project aims to provide Python bindings for ignition-msgs and ignition-transport. It is a work in progress... C++ and Python libr

Rhys Mainwaring 3 Nov 08, 2022
An example of Connecting a MySQL Database with Python Code

An example of Connecting And Query Data a MySQL Database with Python Code And How to install Table of contents General info Technologies Setup General

Mohammad Hosseinzadeh 1 Nov 23, 2021
x-tools is a collection of tools developed in Python

x-tools X-tools is a collection of tools developed in Python Commands\

5 Jan 24, 2022
📙 Super lightweight function registries for your library

catalogue: Super lightweight function registries for your library catalogue is a tiny, zero-dependencies library that makes it easy to add function (o

Explosion 139 Jan 02, 2023
A web-based chat application that enables multiple users to interact with one another

A web-based chat application that enables multiple users to interact with one another, in the same chat room or different ones according to their choosing.

3 Apr 22, 2022