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
Python version of RocketLeague-Dropshot-Calculated-shot

Python version of RocketLeague-Dropshot-Calculated-shot. This is just to demo around and a tool I used to develop the actual plugin.

JareBear 1 Jan 14, 2022
InverterApi - This project has been designed to take monitoring data from Voltronic, Axpert, Mppsolar PIP, Voltacon, Effekta

InverterApi - This project has been designed to take monitoring data from Voltronic, Axpert, Mppsolar PIP, Voltacon, Effekta

Josep Escobar 2 Sep 03, 2022
Using Python to parse through email logs received through several backup systems.

outlook-automated-backup-control Backup monitoring on a mailbox: In this mailbox there will be backup logs. The identification will based on the follo

Connor 2 Sep 28, 2022
IST-Website - IST Tutoring Portal for python

IST Tutoring Portal This portal is a web based interface to handle student help

Jean 3 Jan 03, 2022
Coffeematcher is a python library to randomly match participants for coffee meetings.

coffeematcher coffeematcher is a python library to randomly match participants for coffee meetings. Installation Clone the repository: git clone https

Thomas Wesselink 3 May 06, 2022
A Python script to delete movies with a certain tag after a certain amount of days.

radarr_autodelete Simple script, which deletes movies with a specific tag after a certain amount of days Pip Packages pip3 install pyarr python-dotenv

7 Dec 06, 2022
BinCat is an innovative login system, with which the account you register will be more secure.

BinCat is an innovative login system, with which the account you register will be more secure. This project is inspired by a conventional token system.

Hipotesi 2 May 22, 2022
A collection of Workflows samples for various use cases

Workflows Samples Workflows allow you to orchestrate and automate Google Cloud and HTTP-based API services with serverless workflows.

Google Cloud Platform 76 Jan 07, 2023
Something like Asteroids but not really, done in CircuitPython

CircuitPython Staroids Something like Asteroids, done in CircuitPython. Works with FunHouse, MacroPad, Pybadge, EdgeBadge, CLUE, and Pygamer. circuitp

Tod E. Kurt 14 May 31, 2022
a pull switch (or BYO button) that gets you out of video calls, quick

zoomout a pull switch (or BYO button) that gets you out of video calls, quick. As seen on Twitter System compatibility Tested on macOS Catalina (10.15

Brian Moore 422 Dec 30, 2022
Create standalone, installable R Shiny apps using Electron

Create standalone, installable R Shiny apps using Electron

Chase Clark 5 Dec 24, 2021
a package that provides a marketstrategy for whitelisting on golem

filterms a package that provides a marketstrategy for whitelisting on golem watching requestor logs distribute 10 tasks asynchronously is fun. but you

KJM 3 Aug 03, 2022
Collection of Beginner to Intermediate level Python scripts contributed by members and participants.

Hacktoberfest2021-Python Hello there! This repository contains a 'Collection of Beginner to Intermediate level Python projects', created specially for

12 May 25, 2022
Simple macOS StatusBar app to remind you to unplug your laptop when sufficiently charged

ChargeMon Simple macOS StatusBar app to monitor battery charge status and remind you to unplug your Mac when the battery is sufficiently charged Overv

Rhet Turnbull 5 Jan 25, 2022
Material de apoio da oficina de SAST apresentada pelo CAIS no Webinar de 28/05/21.

CAIS-CAIS Conjunto de Aplicações Intencionamente Sem-Vergonha do CAIS Material didático do Webinar "EP1. Oficina - Práticas de análise estática de cód

Fausto Filho 14 Jul 25, 2022
Discord's own Dumbass made for shits n' Gigs!

FWB3 Discord's own Dumbass made for shits n' Gigs! Please note: This bot is made to be stupid and funny, If you want to get into bot development you'r

1 Dec 06, 2021
An unofficial opensource Pokemon cursor theme for Windows and Linux.

pokemon-cursor An unofficial opensource Pokemon cursor theme for Windows and Linux. Cursor Sizes 22 24 28 32 40 48 56 64 72 80 88 96 Colors Quick inst

Kaiz Khatri 72 Dec 26, 2022
Python scripts to interact with Upper Deck ePack online trading card platform

This script should connect to the Upper Deck ePack API using your browser cookies and download a list of your current collection and save it as a CSV.

Adrian Kent 1 Nov 22, 2021
Курс про техническое совершенство для нетехнарей

Technical Excellence 101 Курс про техническое совершенство для нетехнарей. Этот курс представлят из себя серию воркшопов, при помощи которых можно объ

Anton Bevzuk 11 Nov 13, 2022
Adam with minor modifications which give significant improvement

BAdam Modification of Adam [1] optimizer with increased stability and better performance. Tricks used: Decoupled weight decay as in AdamW [2]. Such de

19 May 11, 2022