edgetest is a tox-inspired python library that will loop through your project's dependencies, and check if your project is compatible with the latest version of each dependency

Overview

Bleeding edge dependency testing

PyPI - Python Version Code style: black PyPI version Anaconda-Server Badge

Full Documentation

edgetest is a tox-inspired python library that will loop through your project's dependencies, and check if your project is compatible with the latest version of each dependency. It does this by:

  • creating a virtual environment,
  • installing your local package into the environment,
  • upgrading specified dependency package(s), and
  • running your test command.

For example, if you depend on pandas>=0.25.1,<=1.0.0, edgetest will test your project against the most current pandas version (say 1.3.4), so you know if you can safely update your dependency to pandas>=0.25.1,<=1.3.4 or not.

Table Of Contents

Install

Create a conda environment with Python 3.7+ and install from PyPI:

$ python -m pip install edgetest

or conda-forge:

$ conda install -c conda-forge edgetest

Getting Started

edgetest allows multi-package, bleeding edge dependency testing. Suppose you have a package, mypackage, with the following requirements.txt:

pandas>=0.25.1,<=1.0.0
...

edgetest allows you to test your package against the latest version of pandas. If you run

$ edgetest

the package will

  1. Create a virtual environment in the .edgetest folder,
  2. Install the local mypackage: .edgetest/pandas/bin/python -m pip install .,
  3. Upgrade pandas: .edgetest/pandas/bin/python -m pip install pandas --upgrade,
  4. Run .edgetest/pandas/bin/python -m pytest, and
  5. Repeat steps 1-4 for all packages in requirements.txt.

After you run the command, you should get console output similar to the following:

============= =============== =================== =================
 Environment   Passing tests   Upgraded packages   Package version
------------- --------------- ------------------- -----------------
 pandas        True            pandas              1.3.4
============= =============== =================== =================

Options

See the advanced usage page.

Plugins

Current plugins include:

Plugin Description
edgetest-conda Uses conda or mamba for environment creation instead of venv.
edgetest-hub Creates a pull request in your GitHub repository with the dependency updates.
edgetest-pip-tools Refreshes a locked requirements file based on the updated dependency pins.

Contributing

See our developer documentation.

We welcome and appreciate your contributions! Before we can accept any contributions, we ask that you please be sure to sign the Contributor License Agreement (CLA)

This project adheres to the Open Source Code of Conduct. By participating, you are expected to honor this code.

License

Apache-2.0

Roadmap

Roadmap details can be found here.

Comments
  • Better support for extras in the upgrade portion

    Better support for extras in the upgrade portion

    Right now if you want to upgrade a package which has mypackage[extras] you need to update it as mypackage. I think we can provide better support for the extras to align better as there could be cases where the items in extras are not being bumped properly.

    @ak-gupta thoughts?

    bug enhancement help wanted 
    opened by fdosani 4
  • Toml support

    Toml support

    Closes #47

    This feature adds in TOML support to co-exist along side setup.cfg support:

    • created mirrored functions between the 2 to keep the logic separate.
      • _convert_toml_array_to_string, parse_toml, and upgrade_pyproject_toml
    • new dependency is added with tomlkit.
    • added in some new unit tests
    opened by fdosani 3
  • Upgrade hook

    Upgrade hook

    Description

    Adding in a new hook specifically for the update/upgrade portion. this will enable plugins to inject custom code

    Fixes #39

    Type of change

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [x] This change requires a documentation update

    Checklist:

    • [x] I have performed a self-review of my own code
    • [x] I have commented my code, particularly in hard-to-understand areas
    • [x] I have made corresponding changes to the documentation
    • [x] My changes generate no new warnings
    • [x] I have added tests that prove my fix is effective or that my feature works
    • [x] New and existing unit tests pass locally with my changes
    • [x] New and existing integration tests pass locally with my changes
    • [ ] Any dependent changes have been merged and published in downstream modules
    opened by fdosani 2
  • Support for pyproject.toml

    Support for pyproject.toml

    Based on PEP 518 here: https://peps.python.org/pep-0518/#overview-of-file-formats-considered It seems like pyproject.toml is preferred over setup.cfg. We should include some support here for various types. So far:

    • setup.cfg (existing)
    • pyproject.toml (new)

    @ak-gupta thoughts?

    enhancement help wanted question 
    opened by fdosani 1
  • edgetest force pushes overwrite user commits

    edgetest force pushes overwrite user commits

    edgetest opened this PR to update the dask[dataframe] version yesterday

    https://github.com/capitalone/rubicon-ml/pull/221

    I had to manually apply those version updates to the environment files in my repo, which caused the whitesource scan to fail. so, I left the PR open overnight to come back to it today and finish. overnight, edgetest again noticed that dask[dataframe] needed to be updated so it created a branch with the same name as the one I had committed my manual changes to yesterday and forced pushed, overwriting the branch

    edgetest should be able to recognize that it already opened the PR to update dask[dataframe] and not force push the same update

    I also imagine that if a second library needed to be updated while the PR for a previous one is still open we'd see the same behavior since the branch always seems to be named edgetest-patch

    opened by ryanSoley 1
  • Create a new plugin hook for Upgrading packages

    Create a new plugin hook for Upgrading packages

    So currently the packages are always upgraded via pip here.

    Proposal is to make this a hook, something like:

    @hookspec(firstresult=True)
    def run_update(python_path: str, upgrade: List):
        """Update packages from upgrade list.
    
        Parameters
        ----------
        python_path : str
            The path to the python executable.
        upgrade : list
            The list of packages to upgrade
       
        Raises
        ------
        RuntimeError
            Error raised if the packages cannot be updated.
        """
    

    This directly links back to a request in the conda plugin: https://github.com/capitalone/edgetest-conda/issues/30 Enabling this functionality will enable the plugin to provide a spec to upgrade via conda.

    enhancement help wanted question 
    opened by fdosani 0
  • Release 2022.6.0

    Release 2022.6.0

    Release 2022.6.0

    Feature:

    • github report format output option (#36)

    House keeping:

    • edgetest bumps (#24, #29, #33)
    • pre-commit bumps (#34)
    • WhiteSource Configuration Migration (#31)
    opened by fdosani 0
  • Update gen_report to print out in the github format

    Update gen_report to print out in the github format

    This feature is needed more of a result for providing the report output in the github format and tied to a request in edgetest-hub: https://github.com/capitalone/edgetest-hub/issues/28

    enhancement 
    opened by fdosani 0
  • inherit additional deps from an environment in `[edgetest.envs.core]`

    inherit additional deps from an environment in `[edgetest.envs.core]`

    it'd be nice if I only had to specify my library's dependencies in [edgetest.envs.core] instead of needing to remember to add every new test dependency. there's already a considerable amount of env declaration duplication required throughout the various package managing tools, so it'd be nice if there wasn't another layer of duplication here

    I'd like to only need to specify the libraries I want to try updating in [edgetest.envs.core]. I'd like to inherit the rest of the dependencies from an environment file. for example:

    [edgetest.envs.core]
    python_version = 3.9
    conda_install = 
    	./environment.yml
    extras = 
    	all
    upgrade = 
    	click
    	dask[dataframe]
    	fsspec
    	intake[dataframe]
    	pandas
    	pyarrow
    	PyYAML
    	s3fs
    	prefect
    	dash
    	dash-bootstrap-components
    
    opened by ryanSoley 2
  • specify which versioning scheme parts to test & auto-update

    specify which versioning scheme parts to test & auto-update

    I'm imagining a scenario where packages using edgetest with a lot of dependencies may need to release their package quite frequently to account for updated dependencies. for example, if I have pyarrow<=7.0.0,>=0.18.0 defined in my setup with the upper bound as required by edgetest and all of a sudden a major bug is found in pyarrow 7.0.0 that needs an immediate upgrade to 7.0.1, I now require an immediate update to and release of my package before users can use it with the fixed pyarrow

    I think it could be useful to be able to specify pyarrow<=7.0,>=0.18.0 (explicitly leaving off the patch version) and having that mean that edgetest will only look for, test, and PR upgrades to the major/minor versions and my setup can automatically allow any update to the patch version to be useable. (I'm assuming that if I were to say pyarrow<=7.0,>=0.18.0 edgetest would currently look for pyarrow 7.0.1 next time it ran, not 7.1 - if that's incorrect then let me know)

    I'm coming from a mindset of avoiding upper pins in general to avoid issues like this, but I absolutely see the value in having them (and especially in having them tested) so I think it'd be nice to be able to configure some kind of "compromise" between the two ideas

    I'm also aware that different versioning schemes could cause headaches here if we were to try something super automatic, so that's something to consider

    thoughts @fdosani @ak-gupta ?

    enhancement question 
    opened by ryanSoley 3
Releases(v2022.11.0)
  • v2022.11.0(Nov 7, 2022)

    What's Changed

    • Changes by run-edgetest action by @github-actions in https://github.com/capitalone/edgetest/pull/46
    • Changes by run-edgetest action by @github-actions in https://github.com/capitalone/edgetest/pull/49
    • Toml support by @fdosani in https://github.com/capitalone/edgetest/pull/48
    • Changes by run-edgetest action by @github-actions in https://github.com/capitalone/edgetest/pull/51
    • Docs housekeeping by @fdosani in https://github.com/capitalone/edgetest/pull/52
    • Update mypy setting for empty-body by @fdosani in https://github.com/capitalone/edgetest/pull/54
    • Release 2022.11.0 by @fdosani in https://github.com/capitalone/edgetest/pull/53

    Full Changelog: https://github.com/capitalone/edgetest/compare/v2022.7.0...v2022.11.0

    Source code(tar.gz)
    Source code(zip)
  • v2022.7.0(Jul 15, 2022)

    What's Changed

    • Changes by run-edgetest action by @github-actions in https://github.com/capitalone/edgetest/pull/38
    • Upgrade hook by @fdosani in https://github.com/capitalone/edgetest/pull/40
    • adding in conf to run_udate hookspec by @fdosani in https://github.com/capitalone/edgetest/pull/41
    • Bump 2022.6.0 to 2022.7.0 by @fdosani in https://github.com/capitalone/edgetest/pull/42
    • Release 2022.7.0 by @fdosani in https://github.com/capitalone/edgetest/pull/43

    Full Changelog: https://github.com/capitalone/edgetest/compare/v2022.6.0...v2022.7.0

    Source code(tar.gz)
    Source code(zip)
  • v2022.6.0(Jun 23, 2022)

    What's Changed

    • Changes by run-edgetest action by @github-actions in https://github.com/capitalone/edgetest/pull/24
    • Changes by run-edgetest action by @github-actions in https://github.com/capitalone/edgetest/pull/29
    • WhiteSource Configuration Migration by @mend-for-github-com in https://github.com/capitalone/edgetest/pull/31
    • Changes by run-edgetest action by @github-actions in https://github.com/capitalone/edgetest/pull/33
    • bump pre-commit versions by @fdosani in https://github.com/capitalone/edgetest/pull/34
    • adding logic to handle github report format by @fdosani in https://github.com/capitalone/edgetest/pull/36
    • Release 2022.6.0 by @fdosani in https://github.com/capitalone/edgetest/pull/37

    New Contributors

    • @mend-for-github-com made their first contribution in https://github.com/capitalone/edgetest/pull/31

    Full Changelog: https://github.com/capitalone/edgetest/compare/v2022.4.0...v2022.6.0

    Source code(tar.gz)
    Source code(zip)
  • v2022.4.0(Apr 19, 2022)

    What's Changed

    • Changes by run-edgetest action by @github-actions in https://github.com/capitalone/edgetest/pull/18
    • updating black version in precommit file by @fdosani in https://github.com/capitalone/edgetest/pull/19
    • Changes by run-edgetest action by @github-actions in https://github.com/capitalone/edgetest/pull/20
    • bumping version to 2022.4.0 by @fdosani in https://github.com/capitalone/edgetest/pull/21
    • Release 2022.4.0 by @fdosani in https://github.com/capitalone/edgetest/pull/23

    Full Changelog: https://github.com/capitalone/edgetest/compare/v2022.3.1...v2022.4.0

    Source code(tar.gz)
    Source code(zip)
  • v2022.3.1(Mar 28, 2022)

    What's Changed

    • Extras upgrade bug fix by @fdosani in https://github.com/capitalone/edgetest/pull/15
    • Release v2022.3.1 by @fdosani in https://github.com/capitalone/edgetest/pull/16

    Full Changelog: https://github.com/capitalone/edgetest/compare/v2022.3.0...v2022.3.1

    Source code(tar.gz)
    Source code(zip)
  • v2022.3.0(Mar 22, 2022)

    What's Changed

    • meta edgetest run by @fdosani in https://github.com/capitalone/edgetest/pull/6
    • edgetest action by @fdosani in https://github.com/capitalone/edgetest/pull/8
    • Changes by run-edgetest action by @github-actions in https://github.com/capitalone/edgetest/pull/9
    • Bump 2021.12.5 to 2022.3.0 by @fdosani in https://github.com/capitalone/edgetest/pull/11
    • Release v2022.3.0 by @fdosani in https://github.com/capitalone/edgetest/pull/12

    New Contributors

    • @github-actions made their first contribution in https://github.com/capitalone/edgetest/pull/9

    Full Changelog: https://github.com/capitalone/edgetest/compare/v2021.12.5...v2022.3.0

    Source code(tar.gz)
    Source code(zip)
  • v2021.12.5(Dec 18, 2021)

    What's Changed

    • setup.cfg fix by @fdosani in https://github.com/capitalone/edgetest/pull/4
    • Release v2021.12.5 by @fdosani in https://github.com/capitalone/edgetest/pull/5

    Full Changelog: https://github.com/capitalone/edgetest/compare/v2021.12.4...v2021.12.5

    Source code(tar.gz)
    Source code(zip)
  • v2021.12.4(Dec 17, 2021)

    What's Changed

    • Bump 2021.12.3 to 2021.12.4 by @fdosani in https://github.com/capitalone/edgetest/pull/2
    • Release v2021.12.4 by @fdosani in https://github.com/capitalone/edgetest/pull/3

    New Contributors

    • @fdosani made their first contribution in https://github.com/capitalone/edgetest/pull/2

    Full Changelog: https://github.com/capitalone/edgetest/commits/v2021.12.4

    Source code(tar.gz)
    Source code(zip)
Owner
Capital One
We’re an open source-first organization — actively using, contributing to and managing open source software projects.
Capital One
Python client SDK designed to simplify integrations by automating key generation and certificate enrollment using Venafi machine identity services.

This open source project is community-supported. To report a problem or share an idea, use Issues; and if you have a suggestion for fixing the issue,

Venafi, Inc. 13 Sep 27, 2022
Blender Add-on to Add Metal Materials to Your Scene

Blender QMM (Quick Metal Materials) Blender Addon to Add Metal Materials to Your Scene Installation Download the latest ZIP from Releases. Usage This

Don Schnitzius 27 Dec 26, 2022
3x - This Is 3x Friendlist Cloner Tools

3X FRIENDLIST CLONER TOOLS COMMAND $ apt update $ apt upgrade $ apt install pyth

MAHADI HASAN AFRIDI 2 Jan 17, 2022
Its a simple and fun to use application. You can make your own quizes and send the lik of the quiz to your friends.

Quiz Application Its a simple and fun to use application. You can make your own quizes and send the lik of the quiz to your friends. When they would a

Atharva Parkhe 1 Feb 23, 2022
Small C-like language compiler for the Uxn assembly language

Pyuxncle is a single-pass compiler for a small subset of C (albeit without the std library). This compiler targets Uxntal, the assembly language of the Uxn virtual computer. The output Uxntal is not

CPunch 13 Jun 28, 2022
A (hopefully) considerably copious collection of classical cipher crackers

ClassicalCipherCracker A (hopefully) considerably copious collection of classical cipher crackers Written in Python3 (and run with PyPy) TODOs Write a

Stanley Zhong 2 Feb 22, 2022
Python template for Advent of Code event

Advent of Code Python Starter A tamplate for Advent of Code write in Python. Usage The project use poetry for project manager. Clone this repository a

Leonardo Gago 6 Dec 31, 2022
Connect Playground - easy way to fill in your account with production-like objects

Just set of scripts to initialise accpunt with production-like data: A - Basic Distributor Account Initialization INPUT Distributor Account Token ACTI

CloudBlue 5 Jun 25, 2021
A web app that is written entirely in Python

University Project About I made this web app to finish a project assigned by my teacher. It is written entirely in Python, thanks to streamlit to make

15 Nov 27, 2022
Nextstrain build targeted to Omicron

About This repository analyzes viral genomes using Nextstrain to understand how SARS-CoV-2, the virus that is responsible for the COVID-19 pandemic, e

Bedford Lab 9 May 25, 2022
A place where one-off ideas/partial projects can live comfortably

A place to post ideas, partial projects, or anything else that doesn't necessarily warrant its own repo, from my mind to the web.

Carson Scott 2 Feb 25, 2022
ELF file deserializer and serializer library

elfo ELF file deserializer and serializer library. import elfo elf = elfo.ELF.from_path('main') elf ELF( header=ELFHeader( e_ident=e

Filipe Laíns 3 Aug 23, 2021
This code makes the logs provided by Fiddler proxy of the Google Analytics events coming from iOS more readable.

GA-beautifier-iOS This code makes the logs provided by Fiddler proxy of the Google Analytics events coming from iOS more readable. To run it, create a

Rafael Machado 3 Feb 02, 2022
GDSC UIET KUK 📍 , welcomes you all to this amazing event where you will be introduced to the world of coding 💻 .

GDSC UIET KUK 📍 , welcomes you all to this amazing event where you will be introduced to the world of coding 💻 .

Google Developer Student Club UIET KUK 9 Mar 24, 2022
Python programs, usually short, of considerable difficulty, to perfect particular skills.

Peter Norvig MIT License 2015-2020 pytudes "An étude (a French word meaning study) is an instrumental musical composition, usually short, of considera

Peter Norvig 19.9k Dec 27, 2022
Utility functions for working with data from Nix in Python

Pynixutil - Utility functions for working with data from Nix in Python Examples Base32 encoding/decoding import pynixutil input = "v5sv61sszx301i0x6x

Tweag 11 Dec 16, 2022
The-White-Noise-Project - The project creates noise intentionally

The-White-Noise-Project High quality audio matters everywhere, even in noise. Be

Ali Hakim Taşkıran 1 Jan 02, 2022
Download and archive entire usenet newsgroups over NNTP.

Usenet Archiving Tool This code is for archiving Usenet discussions, not downloading files. Newsgroup posts are saved under the authors name and email

Corey White 2 Dec 23, 2021
Code repository for the Pytheas submersible observation platform

Pytheas Main repository for the Pytheas submersible probe system. List of Acronyms/Terms USP - Underwater Sensor Platform - The primary platform in th

UltraChip 2 Nov 19, 2022
Purge your likes and wall comments from VKontakte. Set yourself free from your digital footprint.

vk_liberator Regain liberty in the cruel social media world. This program assists you with purging your metadata from Russian social network VKontakte

20 Jun 11, 2021