Browse Source

[to #41669377] docs and tools refinement and release

1. add build_doc linter script
2. add sphinx-docs support
3. add development doc and api doc
4. change version to 0.1.0 for the first internal release version

Link: https://code.aone.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/8775307
master
wenmeng.zwm 3 years ago
parent
commit
db4a8be9c5
34 changed files with 924 additions and 14 deletions
  1. +8
    -0
      .dev_scripts/build_docs.sh
  2. +3
    -0
      .dev_scripts/linter.sh
  3. +28
    -0
      .readthedocs.yaml
  4. +1
    -0
      MANIFEST.in
  5. +25
    -0
      Makefile
  6. +9
    -0
      README.md
  7. +1
    -1
      configs/examples/config.py
  8. +20
    -0
      docs/Makefile
  9. +43
    -0
      docs/README.md
  10. +35
    -0
      docs/make.bat
  11. +34
    -0
      docs/source/api/maas_lib.fileio.format.rst
  12. +34
    -0
      docs/source/api/maas_lib.fileio.rst
  13. +18
    -0
      docs/source/api/maas_lib.models.nlp.rst
  14. +34
    -0
      docs/source/api/maas_lib.models.rst
  15. +18
    -0
      docs/source/api/maas_lib.pipelines.cv.rst
  16. +7
    -0
      docs/source/api/maas_lib.pipelines.multi_modal.rst
  17. +18
    -0
      docs/source/api/maas_lib.pipelines.nlp.rst
  18. +36
    -0
      docs/source/api/maas_lib.pipelines.rst
  19. +50
    -0
      docs/source/api/maas_lib.preprocessors.rst
  20. +30
    -0
      docs/source/api/maas_lib.rst
  21. +58
    -0
      docs/source/api/maas_lib.utils.rst
  22. +7
    -0
      docs/source/api/modules.rst
  23. +13
    -0
      docs/source/change_log.md
  24. +104
    -0
      docs/source/conf.py
  25. +48
    -0
      docs/source/develop.md
  26. +43
    -0
      docs/source/index.rst
  27. +3
    -0
      docs/source/tutorials/index.rst
  28. +4
    -4
      maas_lib/fileio/file.py
  29. +2
    -2
      maas_lib/fileio/io.py
  30. +3
    -3
      maas_lib/models/nlp/sequence_classification_model.py
  31. +2
    -2
      maas_lib/pipelines/builder.py
  32. +1
    -1
      maas_lib/preprocessors/image.py
  33. +1
    -1
      maas_lib/version.py
  34. +183
    -0
      setup.py

+ 8
- 0
.dev_scripts/build_docs.sh View File

@@ -0,0 +1,8 @@
pip install -r requirements/docs.txt
cd docs
rm -rf build

# update api rst
#rm -rf source/api/
#sphinx-apidoc --module-first -o source/api/ ../maas_lib/
make html

+ 3
- 0
.dev_scripts/linter.sh View File

@@ -0,0 +1,3 @@
yapf -r -i maas_lib/ configs/ tests/ setup.py
isort -rc maas_lib/ configs/ tests/ setup.py
flake8 maas_lib/ configs/ tests/ setup.py

+ 28
- 0
.readthedocs.yaml View File

@@ -0,0 +1,28 @@
version: 2

# Set the version of Python and other tools you might need
build:
os: ubuntu-20.04
tools:
python: "3.7"
# You can also specify other tool versions:
# nodejs: "16"
# rust: "1.55"
# golang: "1.17"
jobs:
post_checkout:
- echo "dummy"

# Build documentation in the docs/ directory with Sphinx
sphinx:
configuration: docs/source/conf.py

# If using Sphinx, optionally build your docs in additional formats such as PDF
# formats:
formats: all

python:
install:
- requirements: requirements/docs.txt
- requirements: requirements/readthedocs.txt
- requirements: requirements/runtime.txt

+ 1
- 0
MANIFEST.in View File

@@ -0,0 +1 @@
recursive-include maas_lib/configs *.py

+ 25
- 0
Makefile View File

@@ -0,0 +1,25 @@
WHL_BUILD_DIR :=package
DOC_BUILD_DIR :=docs/build/

# default rule
default: whl docs

.PHONY: docs
docs:
bash .dev_scripts/build_docs.sh

.PHONY: linter
linter:
bash .dev_scripts/linter.sh

.PHONY: test
test:
bash .dev_scripts/citest.sh

.PHONY: whl
whl:
python setup.py sdist bdist_wheel

.PHONY: clean
clean:
rm -rf $(WHL_BUILD_DIR) $(DOC_BUILD_DIR)

+ 9
- 0
README.md View File

@@ -5,3 +5,12 @@ MaaS library is targeted to support training, evaluation and inference for the s
# Design doc

Please refer to alidoc [link](https://alidocs.dingtalk.com/i/nodes/OBldywvrKxo89xmAO05yJQk2ngpNbLz4?nav=spaces&navQuery=spaceId%3Dnb9XJNlZxbgrOXyA&iframeQuery=utm_source%3Dportal%26utm_medium%3Dportal_space_file_tree)

# Development doc

Please refer to [develop.md](docs/source/develop.md)

# ChangeLog
* 20/05/2022 First release version

Refer to [change_log.md](docs/source/change_log.md) for more details

+ 1
- 1
configs/examples/config.py View File

@@ -1,2 +1,2 @@
a = 1
b = dict(c=[1,2,3], d='dd')
b = dict(c=[1, 2, 3], d='dd')

+ 20
- 0
docs/Makefile View File

@@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#

# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = source
BUILDDIR = build

# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

.PHONY: help Makefile

# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

+ 43
- 0
docs/README.md View File

@@ -0,0 +1,43 @@
## maintain docs
1. install requirements needed to build docs
```shell
# in maas_lib root dir
pip install requirements/docs.txt
```

2. build docs
```shell
# in maas_lib/docs dir
bash build_docs.sh
```

3. doc string format

We adopt the google style docstring format as the standard, please refer to the following documents.
1. Google Python style guide docstring [link](http://google.github.io/styleguide/pyguide.html#381-docstrings)
2. Google docstring example [link](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html)
3. sample:torch.nn.modules.conv [link](https://pytorch.org/docs/stable/_modules/torch/nn/modules/conv.html#Conv1d)
4. load fucntion as an example:

```python
def load(file, file_format=None, **kwargs):
"""Load data from json/yaml/pickle files.

This method provides a unified api for loading data from serialized files.

Args:
file (str or :obj:`Path` or file-like object): Filename or a file-like
object.
file_format (str, optional): If not specified, the file format will be
inferred from the file extension, otherwise use the specified one.
Currently supported formats include "json", "yaml/yml".

Examples:
>>> load('/path/of/your/file') # file is storaged in disk
>>> load('https://path/of/your/file') # file is storaged in Internet
>>> load('oss://path/of/your/file') # file is storaged in petrel

Returns:
The content from the file.
"""
```

+ 35
- 0
docs/make.bat View File

@@ -0,0 +1,35 @@
@ECHO OFF

pushd %~dp0

REM Command file for Sphinx documentation

if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=.
set BUILDDIR=build

if "%1" == "" goto help

%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.http://sphinx-doc.org/
exit /b 1
)

%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end

:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%

:end
popd

+ 34
- 0
docs/source/api/maas_lib.fileio.format.rst View File

@@ -0,0 +1,34 @@
maas\_lib.fileio.format package
===============================

.. automodule:: maas_lib.fileio.format
:members:
:undoc-members:
:show-inheritance:

Submodules
----------

maas\_lib.fileio.format.base module
-----------------------------------

.. automodule:: maas_lib.fileio.format.base
:members:
:undoc-members:
:show-inheritance:

maas\_lib.fileio.format.json module
-----------------------------------

.. automodule:: maas_lib.fileio.format.json
:members:
:undoc-members:
:show-inheritance:

maas\_lib.fileio.format.yaml module
-----------------------------------

.. automodule:: maas_lib.fileio.format.yaml
:members:
:undoc-members:
:show-inheritance:

+ 34
- 0
docs/source/api/maas_lib.fileio.rst View File

@@ -0,0 +1,34 @@
maas\_lib.fileio package
========================

.. automodule:: maas_lib.fileio
:members:
:undoc-members:
:show-inheritance:

Subpackages
-----------

.. toctree::
:maxdepth: 4

maas_lib.fileio.format

Submodules
----------

maas\_lib.fileio.file module
----------------------------

.. automodule:: maas_lib.fileio.file
:members:
:undoc-members:
:show-inheritance:

maas\_lib.fileio.io module
--------------------------

.. automodule:: maas_lib.fileio.io
:members:
:undoc-members:
:show-inheritance:

+ 18
- 0
docs/source/api/maas_lib.models.nlp.rst View File

@@ -0,0 +1,18 @@
maas\_lib.models.nlp package
============================

.. automodule:: maas_lib.models.nlp
:members:
:undoc-members:
:show-inheritance:

Submodules
----------

maas\_lib.models.nlp.sequence\_classification\_model module
-----------------------------------------------------------

.. automodule:: maas_lib.models.nlp.sequence_classification_model
:members:
:undoc-members:
:show-inheritance:

+ 34
- 0
docs/source/api/maas_lib.models.rst View File

@@ -0,0 +1,34 @@
maas\_lib.models package
========================

.. automodule:: maas_lib.models
:members:
:undoc-members:
:show-inheritance:

Subpackages
-----------

.. toctree::
:maxdepth: 4

maas_lib.models.nlp

Submodules
----------

maas\_lib.models.base module
----------------------------

.. automodule:: maas_lib.models.base
:members:
:undoc-members:
:show-inheritance:

maas\_lib.models.builder module
-------------------------------

.. automodule:: maas_lib.models.builder
:members:
:undoc-members:
:show-inheritance:

+ 18
- 0
docs/source/api/maas_lib.pipelines.cv.rst View File

@@ -0,0 +1,18 @@
maas\_lib.pipelines.cv package
==============================

.. automodule:: maas_lib.pipelines.cv
:members:
:undoc-members:
:show-inheritance:

Submodules
----------

maas\_lib.pipelines.cv.image\_matting module
--------------------------------------------

.. automodule:: maas_lib.pipelines.cv.image_matting
:members:
:undoc-members:
:show-inheritance:

+ 7
- 0
docs/source/api/maas_lib.pipelines.multi_modal.rst View File

@@ -0,0 +1,7 @@
maas\_lib.pipelines.multi\_modal package
========================================

.. automodule:: maas_lib.pipelines.multi_modal
:members:
:undoc-members:
:show-inheritance:

+ 18
- 0
docs/source/api/maas_lib.pipelines.nlp.rst View File

@@ -0,0 +1,18 @@
maas\_lib.pipelines.nlp package
===============================

.. automodule:: maas_lib.pipelines.nlp
:members:
:undoc-members:
:show-inheritance:

Submodules
----------

maas\_lib.pipelines.nlp.sequence\_classification\_pipeline module
-----------------------------------------------------------------

.. automodule:: maas_lib.pipelines.nlp.sequence_classification_pipeline
:members:
:undoc-members:
:show-inheritance:

+ 36
- 0
docs/source/api/maas_lib.pipelines.rst View File

@@ -0,0 +1,36 @@
maas\_lib.pipelines package
===========================

.. automodule:: maas_lib.pipelines
:members:
:undoc-members:
:show-inheritance:

Subpackages
-----------

.. toctree::
:maxdepth: 4

maas_lib.pipelines.cv
maas_lib.pipelines.multi_modal
maas_lib.pipelines.nlp

Submodules
----------

maas\_lib.pipelines.base module
-------------------------------

.. automodule:: maas_lib.pipelines.base
:members:
:undoc-members:
:show-inheritance:

maas\_lib.pipelines.builder module
----------------------------------

.. automodule:: maas_lib.pipelines.builder
:members:
:undoc-members:
:show-inheritance:

+ 50
- 0
docs/source/api/maas_lib.preprocessors.rst View File

@@ -0,0 +1,50 @@
maas\_lib.preprocessors package
===============================

.. automodule:: maas_lib.preprocessors
:members:
:undoc-members:
:show-inheritance:

Submodules
----------

maas\_lib.preprocessors.base module
-----------------------------------

.. automodule:: maas_lib.preprocessors.base
:members:
:undoc-members:
:show-inheritance:

maas\_lib.preprocessors.builder module
--------------------------------------

.. automodule:: maas_lib.preprocessors.builder
:members:
:undoc-members:
:show-inheritance:

maas\_lib.preprocessors.common module
-------------------------------------

.. automodule:: maas_lib.preprocessors.common
:members:
:undoc-members:
:show-inheritance:

maas\_lib.preprocessors.image module
------------------------------------

.. automodule:: maas_lib.preprocessors.image
:members:
:undoc-members:
:show-inheritance:

maas\_lib.preprocessors.nlp module
----------------------------------

.. automodule:: maas_lib.preprocessors.nlp
:members:
:undoc-members:
:show-inheritance:

+ 30
- 0
docs/source/api/maas_lib.rst View File

@@ -0,0 +1,30 @@
maas\_lib package
=================

.. automodule:: maas_lib
:members:
:undoc-members:
:show-inheritance:

Subpackages
-----------

.. toctree::
:maxdepth: 4

maas_lib.fileio
maas_lib.models
maas_lib.pipelines
maas_lib.preprocessors
maas_lib.utils

Submodules
----------

maas\_lib.version module
------------------------

.. automodule:: maas_lib.version
:members:
:undoc-members:
:show-inheritance:

+ 58
- 0
docs/source/api/maas_lib.utils.rst View File

@@ -0,0 +1,58 @@
maas\_lib.utils package
=======================

.. automodule:: maas_lib.utils
:members:
:undoc-members:
:show-inheritance:

Submodules
----------

maas\_lib.utils.config module
-----------------------------

.. automodule:: maas_lib.utils.config
:members:
:undoc-members:
:show-inheritance:

maas\_lib.utils.constant module
-------------------------------

.. automodule:: maas_lib.utils.constant
:members:
:undoc-members:
:show-inheritance:

maas\_lib.utils.logger module
-----------------------------

.. automodule:: maas_lib.utils.logger
:members:
:undoc-members:
:show-inheritance:

maas\_lib.utils.pymod module
----------------------------

.. automodule:: maas_lib.utils.pymod
:members:
:undoc-members:
:show-inheritance:

maas\_lib.utils.registry module
-------------------------------

.. automodule:: maas_lib.utils.registry
:members:
:undoc-members:
:show-inheritance:

maas\_lib.utils.type\_assert module
-----------------------------------

.. automodule:: maas_lib.utils.type_assert
:members:
:undoc-members:
:show-inheritance:

+ 7
- 0
docs/source/api/modules.rst View File

@@ -0,0 +1,7 @@
maas_lib
========

.. toctree::
:maxdepth: 4

maas_lib

+ 13
- 0
docs/source/change_log.md View File

@@ -0,0 +1,13 @@
## v 0.1.0 (20/05/2022)

First internal release for pipeline inference

* provide basic modules including fileio, logging
* config file parser
* module registry and build, which support group management
* add modules including preprocessor, model and pipeline
* image loading and nlp tokenize support in preprocessor
* add two pipeline: image-matting pipeline and text-classification pipeline
* add task constants according to PRD
* citest support
* makefile and scripts which support packaging whl, build docs, unittest

+ 104
- 0
docs/source/conf.py View File

@@ -0,0 +1,104 @@
# Configuration file for the Sphinx documentation builder.
#
# This file only contains a selection of the most common options. For a full
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html

# -- Path setup --------------------------------------------------------------

# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
import os
import sys

import sphinx_rtd_theme

sys.path.insert(0, os.path.abspath('../../'))
# -- Project information -----------------------------------------------------

project = 'maas_lib'
copyright = '2022-2023, Alibaba PAI'
author = 'maas_lib Authors'
version_file = '../../maas_lib/version.py'


def get_version():
with open(version_file, 'r') as f:
exec(compile(f.read(), version_file, 'exec'))
return locals()['__version__']


# The full version, including alpha/beta/rc tags
version = get_version()
release = version

# -- General configuration ---------------------------------------------------

# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.napoleon',
'sphinx.ext.viewcode',
'recommonmark',
'sphinx_markdown_tables',
'sphinx_copybutton',
]

autodoc_mock_imports = [
'matplotlib', 'pycocotools', 'terminaltables', 'mmcv.ops'
]

# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']

# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
source_suffix = {
'.rst': 'restructuredtext',
'.md': 'markdown',
}

# The master toctree document.
master_doc = 'index'

# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = ['build', 'Thumbs.db', '.DS_Store']

# -- Options for HTML output -------------------------------------------------

# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'sphinx_rtd_theme'
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
html_theme_options = {}

# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# html_css_files = ['css/readthedocs.css']

# -- Options for HTMLHelp output ---------------------------------------------
# Output file base name for HTML help builder.
htmlhelp_basename = 'maas_lib_doc'

# -- Extension configuration -------------------------------------------------
# Ignore >>> when copying code
copybutton_prompt_text = r'>>> |\.\.\. '
copybutton_prompt_is_regexp = True

# Example configuration for intersphinx: refer to the Python standard library.
intersphinx_mapping = {'https://docs.python.org/': None}

autodoc_default_options = {
'member-order': 'bysource',
'special-members': '__init__',
}

+ 48
- 0
docs/source/develop.md View File

@@ -0,0 +1,48 @@
# Develop

## 1. Code Style
We adopt [PEP8](https://www.python.org/dev/peps/pep-0008/) as the preferred code style.

We use the following toolsseed isortseed isortseed isort for linting and formatting:
- [flake8](http://flake8.pycqa.org/en/latest/): linter
- [yapf](https://github.com/google/yapf): formatter
- [isort](https://github.com/timothycrosley/isort): sort imports

Style configurations of yapf and isort can be found in [setup.cfg](../../setup.cfg).
We use [pre-commit hook](https://pre-commit.com/) that checks and formats for `flake8`, `yapf`, `seed-isort-config`, `isort`, `trailing whitespaces`,
fixes `end-of-files`, sorts `requirments.txt` automatically on every commit.
The config for a pre-commit hook is stored in [.pre-commit-config](../../.pre-commit-config.yaml).
After you clone the repository, you will need to install initialize pre-commit hook.
```bash
pip install -r requirements/tests.txt
```
From the repository folder
```bash
pre-commit install
```

After this on every commit check code linters and formatter will be enforced.

If you want to use pre-commit to check all the files, you can run
```bash
pre-commit run --all-files
```

If you only want to format and lint your code, you can run
```bash
make linter
```

## 2. Test
### 2.1 Unit test
```bash
make test
```

### 2.2 Test data
TODO

## 3. Build pip package
```bash
make whl
```

+ 43
- 0
docs/source/index.rst View File

@@ -0,0 +1,43 @@
.. maas_lib documentation file,
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.

MaasLib DOCUMENTATION
=======================================

MaasLib doc

.. toctree::
:maxdepth: 2
:caption: USER GUIDE

develop.md

.. toctree::
:maxdepth: 2
:caption: Tutorials

tutorials/index

.. toctree::
:maxdepth: 2
:caption: Changelog

change_log.md

.. toctree::
:maxdepth: 10
:caption: API Doc

api/maas_lib.preprocessors
api/maas_lib.models
api/maas_lib.pipelines
api/maas_lib.fileio
api/maas_lib.utils


Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

+ 3
- 0
docs/source/tutorials/index.rst View File

@@ -0,0 +1,3 @@
.. toctree::
:maxdepth: 2
:caption: Tutorials

+ 4
- 4
maas_lib/fileio/file.py View File

@@ -75,7 +75,7 @@ class LocalStorage(Storage):
"""Write data to a given ``filepath`` with 'wb' mode.

Note:
``put`` will create a directory if the directory of ``filepath``
``write`` will create a directory if the directory of ``filepath``
does not exist.

Args:
@@ -95,7 +95,7 @@ class LocalStorage(Storage):
"""Write data to a given ``filepath`` with 'w' mode.

Note:
``put_text`` will create a directory if the directory of
``write_text`` will create a directory if the directory of
``filepath`` does not exist.

Args:
@@ -291,7 +291,7 @@ class File(object):
"""Write data to a given ``filepath`` with 'wb' mode.

Note:
``put`` will create a directory if the directory of ``filepath``
``write`` will create a directory if the directory of ``filepath``
does not exist.

Args:
@@ -306,7 +306,7 @@ class File(object):
"""Write data to a given ``filepath`` with 'w' mode.

Note:
``put_text`` will create a directory if the directory of
``write_text`` will create a directory if the directory of
``filepath`` does not exist.

Args:


+ 2
- 2
maas_lib/fileio/io.py View File

@@ -114,8 +114,8 @@ def dumps(obj, format, **kwargs):
format (str, optional): Same as file_format :func:`load`.

Examples:
>>> dumps('hello world', 'json') # disk
>>> dumps('hello world', 'yaml') # oss
>>> dumps('hello world', 'json') # json
>>> dumps('hello world', 'yaml') # yaml

Returns:
bool: True for success, False otherwise.


+ 3
- 3
maas_lib/models/nlp/sequence_classification_model.py View File

@@ -21,12 +21,12 @@ class SequenceClassificationModel(Model):
**kwargs):
# Model.__init__(self, model_dir, model_cls, first_sequence, *args, **kwargs)
# Predictor.__init__(self, *args, **kwargs)
"""initilize the sequence classification model from the `model_dir` path
"""initilize the sequence classification model from the `model_dir` path.

Args:
model_dir (str): the model path
model_dir (str): the model path.
model_cls (Optional[Any], optional): model loader, if None, use the
default loader to load model weights, by default None
default loader to load model weights, by default None.
"""

super().__init__(model_dir, model_cls, *args, **kwargs)


+ 2
- 2
maas_lib/pipelines/builder.py View File

@@ -14,12 +14,12 @@ PIPELINES = Registry('pipelines')
def build_pipeline(cfg: ConfigDict,
task_name: str = None,
default_args: dict = None):
""" build pipeline given model config dict
""" build pipeline given model config dict.

Args:
cfg (:obj:`ConfigDict`): config dict for model object.
task_name (str, optional): task name, refer to
:obj:`Tasks` for more details
:obj:`Tasks` for more details.
default_args (dict, optional): Default initialization arguments.
"""
return build_from_cfg(


+ 1
- 1
maas_lib/preprocessors/image.py View File

@@ -60,7 +60,7 @@ class LoadImage:
return repr_str


def load_image(image_path_or_url: str) -> Image:
def load_image(image_path_or_url: str) -> Image.Image:
""" simple interface to load an image from file or url

Args:


+ 1
- 1
maas_lib/version.py View File

@@ -1 +1 @@
__version__ = '0.0.1'
__version__ = '0.1.0'

+ 183
- 0
setup.py View File

@@ -0,0 +1,183 @@
# Copyright (c) Alibaba, Inc. and its affiliates.
# !/usr/bin/env python
import os
import shutil
import subprocess
from setuptools import find_packages, setup


def readme():
with open('README.md', encoding='utf-8') as f:
content = f.read()
return content


version_file = 'maas_lib/version.py'


def get_git_hash():

def _minimal_ext_cmd(cmd):
# construct minimal environment
env = {}
for k in ['SYSTEMROOT', 'PATH', 'HOME']:
v = os.environ.get(k)
if v is not None:
env[k] = v
# LANGUAGE is used on win32
env['LANGUAGE'] = 'C'
env['LANG'] = 'C'
env['LC_ALL'] = 'C'
out = subprocess.Popen(
cmd, stdout=subprocess.PIPE, env=env).communicate()[0]
return out

try:
out = _minimal_ext_cmd(['git', 'rev-parse', 'HEAD'])
sha = out.strip().decode('ascii')
except OSError:
sha = 'unknown'

return sha


def get_hash():
assert os.path.exists('.git'), '.git directory does not exist'
sha = get_git_hash()[:7]
return sha


def get_version():
with open(version_file, 'r') as f:
exec(compile(f.read(), version_file, 'exec'))
return locals()['__version__']


def parse_requirements(fname='requirements.txt', with_version=True):
"""
Parse the package dependencies listed in a requirements file but strips
specific versioning information.

Args:
fname (str): path to requirements file
with_version (bool, default=False): if True include version specs

Returns:
List[str]: list of requirements items

CommandLine:
python -c "import setup; print(setup.parse_requirements())"
"""
import sys
from os.path import exists
import re
require_fpath = fname

def parse_line(line):
"""
Parse information from a line in a requirements text file
"""
if line.startswith('-r '):
# Allow specifying requirements in other files
target = line.split(' ')[1]
for info in parse_require_file(target):
yield info
else:
info = {'line': line}
if line.startswith('-e '):
info['package'] = line.split('#egg=')[1]
else:
# Remove versioning from the package
pat = '(' + '|'.join(['>=', '==', '>']) + ')'
parts = re.split(pat, line, maxsplit=1)
parts = [p.strip() for p in parts]

info['package'] = parts[0]
if len(parts) > 1:
op, rest = parts[1:]
if ';' in rest:
# Handle platform specific dependencies
# http://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-platform-specific-dependencies
version, platform_deps = map(str.strip,
rest.split(';'))
info['platform_deps'] = platform_deps
else:
version = rest # NOQA
info['version'] = (op, version)
yield info

def parse_require_file(fpath):
with open(fpath, 'r') as f:
for line in f.readlines():
line = line.strip()
if line.startswith('http'):
print('skip http requirements %s' % line)
continue
if line and not line.startswith('#'):
for info in parse_line(line):
yield info

def gen_packages_items():
if exists(require_fpath):
for info in parse_require_file(require_fpath):
parts = [info['package']]
if with_version and 'version' in info:
parts.extend(info['version'])
if not sys.version.startswith('3.4'):
# apparently package_deps are broken in 3.4
platform_deps = info.get('platform_deps')
if platform_deps is not None:
parts.append(';' + platform_deps)
item = ''.join(parts)
yield item

packages = list(gen_packages_items())
return packages


def pack_resource():
# pack resource such as configs and tools
root_dir = 'package/'
if os.path.isdir(root_dir):
shutil.rmtree(root_dir)
os.makedirs(root_dir)

proj_dir = root_dir + 'maas_lib/'
shutil.copytree('./maas_lib', proj_dir)
shutil.copytree('./configs', proj_dir + 'configs')
shutil.copytree('./requirements', 'package/requirements')
shutil.copy('./requirements.txt', 'package/requirements.txt')
shutil.copy('./MANIFEST.in', 'package/MANIFEST.in')
shutil.copy('./README.md', 'package/README.md')


if __name__ == '__main__':
# write_version_py()
pack_resource()
os.chdir('package')
install_requires = parse_requirements('requirements.txt')
setup(
name='maas-lib',
version=get_version(),
description='',
long_description=readme(),
long_description_content_type='text/markdown',
author='Alibaba PAI team',
author_email='maas_lib@list.alibaba-inc.com',
keywords='',
url='https://github.com/alibaba/EasyCV.git',
packages=find_packages(exclude=('configs', 'tools', 'demo')),
include_package_data=True,
classifiers=[
'Development Status :: 4 - Beta',
'License :: OSI Approved :: Apache Software License',
'Operating System :: OS Independent',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
],
license='Apache License 2.0',
tests_require=parse_requirements('requirements/tests.txt'),
install_requires=install_requires,
zip_safe=False)

Loading…
Cancel
Save