Code Monkey home page Code Monkey logo

v2's Introduction

V2: Fast Detection of Configuration Drift in Python

V2 detects and repairs instances of configuration drift in Python snippets.

Dependencies

Name Version
Node.js 12.1.0
Docker 18.09.2
Docker Compose 1.23.2

Setup

Install dependencies and link the V2 executable with

npm i
npm link

Then build Docker images and start services

v2 build
docker-compose up --detach

V2 requires the Docker daemon to be up and running. Additionally, the user must have permissions to create Docker containers.

Running V2

To run V2 on a code snippet with logging information, run

v2 run --verbose <code-snippet>

V2 will attempt to create a Dockerfile describing a working environment configuration. If one cannot be found, it will present information about what instances of configuration drift were found and patched.

V2 may also be run from inside a Docker, but requires having the Docker socket bind mounted.

docker run --rm -it --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock -v "$(pwd):/data:ro" --network=<network> localhost:5000/v2/v2:latest v2 run /data

Examples

All examples are stored under examples/.

Bayes

v2 run examples/bayes/bayes.py

Running on Bayes will produce the following Dockerfile.

FROM python:3.7
COPY . /app
RUN ["apt-get","update"]
RUN ["pip","install","the==0.1.5"]
RUN ["pip","install","PyYAML==5.1"]
RUN ["pip","install","numpy==1.16.3"]
RUN ["pip","install","scipy==1.2.1"]
RUN ["pip","install","Theano==0.8.2"]
RUN ["pip","install","Lasagne==0.1"]
CMD ["python","/app/bayes.py"]

Guess Candidate Model

v2 run examples/guess_candidate_model/guess_candidate_model.py

No working environment can be found for Guess Candidate Model due to an error in the gist. However, two instances of configuration drift are still found.

{
    "name": "NoWorkingEnvironmentFoundError",
    "time": 271,
    "validations": 12,
    "metadata": [
        {
            "id": "0",
            "fixedValidations": [
                {
                    "status_code": "Failed",
                    "dependencies": {
                        "status_code": "Success",
                        "install_errors": []
                    },
                    "execution": {
                        "status_code": "Exception",
                        "exception_name": "ModuleNotFoundError",
                        "exception_message": "No module named 'sklearn.cross_validation'",
                        "exception_file_name": "/data/examples/guess_candidate_model/guess_candidate_model.py",
                        "exception_line_number": 4,
                        "exception_line": "from sklearn.cross_validation import train_test_split",
                        "exception_stack": [
                            [
                                "/data/examples/guess_candidate_model/guess_candidate_model.py",
                                4,
                                "<module>",
                                "from sklearn.cross_validation import train_test_split"
                            ]
                        ]
                    },
                    "validations": 1
                },
                {
                    "status_code": "Failed",
                    "dependencies": {
                        "status_code": "Success",
                        "install_errors": []
                    },
                    "execution": {
                        "status_code": "Exception",
                        "exception_name": "ModuleNotFoundError",
                        "exception_message": "No module named 'tensorflow'",
                        "exception_file_name": "/usr/local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py",
                        "exception_line_number": 5,
                        "exception_line": "import tensorflow as tf",
                        "exception_stack": [
                            [
                                "/data/examples/guess_candidate_model/guess_candidate_model.py",
                                5,
                                "<module>",
                                "from keras.preprocessing import sequence, text"
                            ],
                            [
                                "/usr/local/lib/python3.7/site-packages/keras/__init__.py",
                                3,
                                "<module>",
                                "from . import utils"
                            ],
                            [
                                "/usr/local/lib/python3.7/site-packages/keras/utils/__init__.py",
                                6,
                                "<module>",
                                "from . import conv_utils"
                            ],
                            [
                                "/usr/local/lib/python3.7/site-packages/keras/utils/conv_utils.py",
                                9,
                                "<module>",
                                "from .. import backend as K"
                            ],
                            [
                                "/usr/local/lib/python3.7/site-packages/keras/backend/__init__.py",
                                89,
                                "<module>",
                                "from .tensorflow_backend import *"
                            ],
                            [
                                "/usr/local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py",
                                5,
                                "<module>",
                                "import tensorflow as tf"
                            ]
                        ]
                    },
                    "validations": 4
                }
            ],
            "mutations": [
                {
                    "type": "decrement_semver_minor",
                    "changes": {
                        "package": "scikit-learn",
                        "from": "0.20.3",
                        "to": "0.19.2"
                    },
                    "iddfs": {
                        "mutatorIndex": 1
                    }
                },
                {
                    "type": "decrement_semver_major",
                    "changes": {
                        "package": "Keras",
                        "from": "2.2.4",
                        "to": "1.2.2"
                    },
                    "iddfs": {
                        "index": 1,
                        "mutatorIndex": 0
                    }
                },
                {
                    "type": "decrement_semver_major",
                    "changes": {
                        "package": "Keras",
                        "from": "1.2.2",
                        "to": "0.3.3"
                    },
                    "iddfs": {
                        "index": 1,
                        "mutatorIndex": 0
                    }
                }
            ],
            "checkpoint": {
                "status_code": "Failed",
                "dependencies": {
                    "status_code": "Success",
                    "install_errors": []
                },
                "execution": {
                    "status_code": "Exception",
                    "exception_name": "NameError",
                    "exception_message": "name 'labeled_sample' is not defined",
                    "exception_file_name": "/data/examples/guess_candidate_model/guess_candidate_model.py",
                    "exception_line_number": 27,
                    "exception_line": "X = [x[1] for x in labeled_sample]",
                    "exception_stack": [
                        [
                            "/data/examples/guess_candidate_model/guess_candidate_model.py",
                            27,
                            "<module>",
                            "X = [x[1] for x in labeled_sample]"
                        ]
                    ]
                },
                "validations": 0
            },
            "code": "NotRepairable",
            "message": "Validation exception 'NameError' is not repairable."
        },
        ...
    ],
    "message": "Unable to find a working environment configuration",
    "stack": [
        "NoWorkingEnvironmentFoundError: Unable to find a working environment configuration",
        "    at V2.infer (/v2/index.js:359:15)",
        "    at process._tickCallback (internal/process/next_tick.js:68:7)"
    ]
}

Mobi

v2 run examples/mobi/mobi.py

Running on Mobi will produce the following Dockerfile.

FROM python:2.7
COPY . /app
RUN ["apt-get","update"]
RUN ["pip","install","six==1.12.0"]
RUN ["pip","install","docutils==0.14"]
RUN ["pip","install","pydocumentdb==2.3.3"]
RUN ["pip","install","Sphinx==1.4.5"]
CMD ["python","/app/mobi.py"]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.