Welcome to the MythX Domain Model docs!

The MythX Domain Models

https://img.shields.io/pypi/v/mythx-models.svg https://travis-ci.org/dmuhs/mythx-models.svg?branch=master https://readthedocs.org/projects/mythx-models/badge/?version=latest https://pyup.io/repos/github/dmuhs/mythx-models/shield.svg https://coveralls.io/repos/github/dmuhs/mythx-models/badge.svg?branch=master

This repository contains the domain models for the MythX smart contract security analysis platform.

What is MythX?

MythX is a security analysis API that allows anyone to create purpose-built security tools for smart contract developers. Tools built on MythX integrate seamlessly into the development environments and continuous integration pipelines used throughout the Ethereum ecosystem.

Installation

The MythX domain models runs on Python 3.5+.

To get started, simply run

$ pip3 install mythx-models

Alternatively, clone the repository and run

$ pip3 install .

Or directly through Python’s setuptools:

$ python3 setup.py install

Advanced Installation

Stable release

To install the MythX domain models, run this command in your terminal:

$ pip3 install mythx-models

This is the preferred method to install the MythX domain models, as it will always install the most recent stable release.

If you don’t have pip installed, this Python installation guide can guide you through the process.

From sources

The sources for the MythX domain models can be downloaded from the Github repo.

You can either clone the public repository:

$ git clone git://github.com/dmuhs/mythx-models

Or download the tarball:

$ curl  -OL https://github.com/dmuhs/mythx-models/tarball/master

Once you have a copy of the source, you can install it with:

$ python setup.py install

mythx-models

mythx-models package

Subpackages

mythx_models.request package
Submodules
mythx_models.request.analysis_list module

This module contains the AnalysisListRequest domain model.

class mythx_models.request.analysis_list.AnalysisListRequest[source]

Bases: pydantic.main.BaseModel

class Config[source]

Bases: object

allow_population_by_field_name = True
use_enum_values = True
endpoint
headers
method
parameters
payload
mythx_models.request.analysis_status module

This module contains the AnalysisStatusRequest domain model.

class mythx_models.request.analysis_status.AnalysisStatusRequest[source]

Bases: pydantic.main.BaseModel

endpoint
headers
method
parameters
payload
mythx_models.request.analysis_submission module

This module contains the AnalysisSubmissionRequest domain model.

class mythx_models.request.analysis_submission.AnalysisSubmissionRequest[source]

Bases: pydantic.main.BaseModel

class Config[source]

Bases: object

allow_population_by_field_name = True
use_enum_values = True
endpoint
headers
method
parameters
payload
mythx_models.request.auth_login module

This module contains the AuthLoginRequest domain model.

class mythx_models.request.auth_login.AuthLoginRequest[source]

Bases: pydantic.main.BaseModel

endpoint
headers
method
parameters
payload
mythx_models.request.auth_logout module

This module contains the AuthLogoutRequest domain model.

class mythx_models.request.auth_logout.AuthLogoutRequest[source]

Bases: pydantic.main.BaseModel

endpoint
headers
method
parameters
payload
mythx_models.request.auth_refresh module

This module contains the AuthRefreshRequest domain model.

class mythx_models.request.auth_refresh.AuthRefreshRequest[source]

Bases: pydantic.main.BaseModel

class Config[source]

Bases: object

allow_population_by_field_name = True
use_enum_values = True
endpoint
headers
method
parameters
payload
mythx_models.request.base module
mythx_models.request.detected_issues module

This module contains the DetectedIssuesRequest domain model.

class mythx_models.request.detected_issues.DetectedIssuesRequest[source]

Bases: pydantic.main.BaseModel

endpoint
headers
method
parameters
payload
mythx_models.request.oas module
mythx_models.request.version module

This module contains the VersionRequest domain model.

class mythx_models.request.version.VersionRequest[source]

Bases: pydantic.main.BaseModel

endpoint
headers
method
parameters
payload
Module contents

This module contains the MythX request domain models.

mythx_models.response package
Submodules
mythx_models.response.analysis module

This module contains domain models regarding analysis jobs.

class mythx_models.response.analysis.Analysis[source]

Bases: pydantic.main.BaseModel

class Config[source]

Bases: object

allow_population_by_field_name = True
use_enum_values = True
class mythx_models.response.analysis.AnalysisShort[source]

Bases: pydantic.main.BaseModel

class Config[source]

Bases: object

allow_population_by_field_name = True
use_enum_values = True
class mythx_models.response.analysis.AnalysisStatus[source]

Bases: str, enum.Enum

An Enum describing the status an analysis job can be in.

ERROR = 'Error'
FINISHED = 'Finished'
IN_PROGRESS = 'In Progress'
QUEUED = 'Queued'
mythx_models.response.analysis_list module

This module contains the AnalysisListResponse domain model.

class mythx_models.response.analysis_list.AnalysisListResponse[source]

Bases: pydantic.main.BaseModel

mythx_models.response.analysis_status module

This module contains the AnalysisStatusResponse domain model.

class mythx_models.response.analysis_status.AnalysisStatusResponse[source]

Bases: mythx_models.response.analysis.AnalysisShort

The API response domain model for the status of a single analysis.

mythx_models.response.analysis_submission module

This module contains the AnalysisSubmissionResponse domain model.

class mythx_models.response.analysis_submission.AnalysisSubmissionResponse[source]

Bases: mythx_models.response.analysis.AnalysisShort

mythx_models.response.auth_login module

This module contains the AuthLoginResponse domain model.

class mythx_models.response.auth_login.AuthLoginResponse[source]

Bases: pydantic.main.BaseModel

class Config[source]

Bases: object

allow_population_by_field_name = True
use_enum_values = True
mythx_models.response.auth_logout module

This module contains the AuthLogoutResponse domain model.

class mythx_models.response.auth_logout.AuthLogoutResponse[source]

Bases: pydantic.main.BaseModel

mythx_models.response.auth_refresh module

This module contains the AuthRefreshResponse domain model.

class mythx_models.response.auth_refresh.AuthRefreshResponse[source]

Bases: pydantic.main.BaseModel

class Config[source]

Bases: object

allow_population_by_field_name = True
use_enum_values = True
mythx_models.response.base module
mythx_models.response.detected_issues module

This module contains the response models for the detected issues endpoint and a report helper.

class mythx_models.response.detected_issues.DetectedIssuesResponse[source]

Bases: pydantic.main.BaseModel

class mythx_models.response.detected_issues.IssueReport[source]

Bases: pydantic.main.BaseModel

mythx_models.response.issue module

This module contains domain models regrading found issues.

class mythx_models.response.issue.Issue[source]

Bases: pydantic.main.BaseModel

class Config[source]

Bases: object

allow_population_by_field_name = True
use_enum_values = True
class mythx_models.response.issue.IssueDescription[source]

Bases: pydantic.main.BaseModel

class mythx_models.response.issue.LineLocation[source]

Bases: pydantic.main.BaseModel

class mythx_models.response.issue.SEVERITY[source]

Bases: str, enum.Enum

An Enum holding the possible severities an issue can have.

HIGH = 'High'
LOW = 'Low'
MEDIUM = 'Medium'
NONE = 'None'
UNKNOWN = 'Unknown'
class mythx_models.response.issue.SourceLocation[source]

Bases: pydantic.main.BaseModel

class Config[source]

Bases: object

allow_population_by_field_name = True
class mythx_models.response.issue.SourceMap[source]

Bases: pydantic.main.BaseModel

components
static decompress(source_map: str) → List[mythx_models.response.issue.SourceMapLocation][source]
static sourcemap_reducer(accumulator: Tuple[int, int, int, str], component: str) → List[str][source]
class mythx_models.response.issue.SourceMapLocation[source]

Bases: pydantic.main.BaseModel

mythx_models.response.oas module
mythx_models.response.version module

This module contains the VersionResponse domain model.

class mythx_models.response.version.VersionResponse[source]

Bases: pydantic.main.BaseModel

Module contents

This module contains the MythX response domain models.

mythx_models.exceptions package
Module contents

This module contains exceptions raised by MythX.

exception mythx_models.exceptions.MythXAPIError[source]

Bases: Exception

An exception denoting an API-related error.

This is usually raised when the API takes too long to respond, or a response contains an HTTP status code that is not 200 OK. In this case, the exception is passed on to the developer. This should give them early warnings about malformed data on their side, or recover in case the API is not available or experiences some kind of error we cannot handle.

mythx_models.util package
Module contents

This module contains various utility functions for MythX domain models.

mythx_models.util.deserialize_api_timestamp(timestamp_str: str) → datetime.datetime[source]

Deserialize a JavaScript API timestamp into Python datetime format.

Parameters:timestamp_str – The JS timestamp, e.g. 2019-01-10T01:29:38.410Z
Returns:A Python datetime object
mythx_models.util.dict_delete_none_fields(d: Dict[KT, VT]) → Dict[KT, VT][source]

Remove all keys that have “None” values in a dict.

Parameters:d – The dictionary to sanitize
Returns:The dict instance with all “None keys” removed
mythx_models.util.serialize_api_timestamp(ts_obj: datetime.datetime) → Optional[str][source]

Serialize a Python datetime object to its JS equivalent.

Parameters:ts_obj – A Python datetime object
Returns:The JS timestamp, e.g. 2019-01-10T01:29:38.410Z

Module contents

Top-level package for mythx-models.

Contributing

Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given.

You can contribute in many ways:

Types of Contributions

Report Bugs

Report bugs at https://github.com/dmuhs/mythx-models/issues.

If you are reporting a bug, please include:

  • Your operating system name and version.
  • Any details about your local setup that might be helpful in troubleshooting.
  • Detailed steps to reproduce the bug.

Fix Bugs

Look through the GitHub issues for bugs. Anything tagged with “bug” and “help wanted” is open to whoever wants to implement it.

Implement Features

Look through the GitHub issues for features. Anything tagged with “enhancement” and “help wanted” is open to whoever wants to implement it.

Write Documentation

The MythX domain models could always use more documentation, whether as part of the official MythX docs, in docstrings, or even on the web in blog posts, articles, and such.

Submit Feedback

The best way to send feedback is to file an issue at https://github.com/dmuhs/mythx-models/issues.

If you are proposing a feature:

  • Explain in detail how it would work.
  • Keep the scope as narrow as possible, to make it easier to implement.
  • Remember that this is a volunteer-driven project, and that contributions are welcome :)

Get Started!

Ready to contribute? Here’s how to set up mythx-models for local development.

  1. Fork the mythx-models repo on GitHub.

  2. Clone your fork locally:

    $ git clone git@github.com:your_name_here/mythx-models.git
    
  3. Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development:

    $ mkvirtualenv mythx-models
    $ cd mythx-models/
    $ python setup.py develop
    
  4. Create a branch for local development:

    $ git checkout -b name-of-your-bugfix-or-feature
    

    Now you can make your changes locally.

  5. When you’re done making changes, check that your changes pass flake8 and the tests:

    $ flake8 mythx-models tests or make lint
    $ python3 setup.py test or make test
    

    To get flake8, just pip install them into your virtualenv.

  6. Commit your changes and push your branch to GitHub:

    $ git add .
    $ git commit -m "Your detailed description of your changes."
    $ git push origin name-of-your-bugfix-or-feature
    
  7. Submit a pull request through the GitHub website.

Pull Request Guidelines

Before you submit a pull request, check that it meets these guidelines:

  1. The pull request should include tests.
  2. If the pull request adds functionality, the docs should be updated. Put your new functionality into a function with a docstring, and add the feature to the list in README.rst.
  3. The pull request should work for Python, 3.5 and 3.6, and 3.7. Check https://travis-ci.org/dmuhs/mythx-models/pull_requests and make sure that the tests pass for all supported Python versions.

Deploying

A reminder for the maintainers on how to deploy. Make sure all your changes are committed (including an entry in HISTORY.rst). Then run:

$ bumpversion patch # possible: major / minor / patch
$ git push
$ git push --tags

Travis will then deploy to PyPI if tests pass.

Credits

Development Lead

Indices and tables