Skip to main content

No project description provided

Project description

shmakovpn_tools

History

PACKAGE_NAME=shmakovpn
PROJECT_NAME=${PACKAGE_NAME}_tools
PROJECT_DIR=~/${PROJECT_NAME}
DOCS_DIR=${PROJECT_DIR}/docs
mkvirtualenv shmakovpn -p /usr/bin/python3.6
mkdir $PROJECT_DIR
cd $PROJECT_DIR
touch README.md

# configuring .gitignore
touch .gitignore
echo '# IDEs' >> .gitignore
echo '.idea/' >> .gitignore
echo '' >> .gitignore
echo '# python' >> .gitignore
echo '*.pyc' >> .gitignore  #* comment for vim highlight
echo '__pychache__/' >> .gitignore
echo '*.egg-info/' >> .gitignore  #* comment for vim hightlight
echo '.eggs/' >> .gitignore
echo '' >> .gitignore
echo '# Django' >> .gitignore
echo 'migrations/' >> .gitignore
echo 'db.sqlite3' >> .gitignore
echo 'settings.py' >> .gitignore
echo 'manage.py' >> .gitignore
echo '' >> .gitignore
echo '# virtualenv' >> .gitignore
echo 'venv/' >> .gitignore
echo '' >> .gitignore
echo '# sphinx' >> .gitignore
echo 'docs/build/html/' >> .gitignore
echo 'docs/build/doctrees/' >> .gitignore
echo '_build/' >> .gitignore
echo '_static/' >> .gitignore
echo '_templates/' >> .gitignore
echo '' >> .gitignore
echo '# codecov' >> .gitignore
echo '.coverage' >> .gitignore
echo '' >> .gitignore
echo '# pytest' >> .gitignore
echo '.pytest_cache/' >> .gitignore
echo '' >> .gitignore
echo '# vim swp' >> .gitignore
echo '*.swp' >> .gitignore  #* comment for vim highlight
echo '' >> .gitignore
echo '# pytest cache' >> .gitignore
echo '.pytest_cache/' >> .gitignore
echo '' >> .gitignore
echo '# build' >> .gitignore
echo 'build/' >> .gitignore
echo 'dist/' >> .gitignore

# conguring requirements.txt
touch requirements.txt
## turning vim to IDE
echo 'pyflakes' >> requirements.txt
echo 'pep8' >> requirements.txt
echo 'pylint' >> requirements.txt
echo 'ipython' >> requirements.txt
## sphinx
echo 'sphinx' >> requirements.txt
echo 'sphinx-rtd-theme' >> requirements.txt
## shmakovpn whatprovides
echo 'whatprovides' >> requirements.txt
## twine (need for uploading package to PyPI)
echo 'twine' >> requirements.txt

# installing packages
pip install --upgrade pip
pip install -r requirements.txt

# configuring travis-ci
touch .travis.yml
echo 'language: python' >> .travis.yml
echo 'sudo: false' >> .travis.yml
echo 'jobs:' >> .travis.yml
echo '  include:' >> .travis.yml
echo '    - name: "Python 3.6 on Linux"' >> .travis.yml
echo '      python: "3.6"' >> .travis.yml
echo '    - name: "Python 3.7 on Linux"' >> .travis.yml
echo '      python: "3.7"' >> .travis.yml
echo '    - name: "Python 3.8 on Linux"' >> .travis.yml
echo '      python: "3.8"' >> .travis.yml
echo '    - name: "Python 3.8.0 on Windows"' >> .travis.yml
echo '      os: windows' >> .travis.yml
echo '      language: shell' >> .travis.yml
echo '      before_install:' >> .travis.yml
echo '        - choco install python --version 3.8.0' >> .travis.yml
echo '        - python -m pip install --upgrade pip' >> .travis.yml
echo '      env: PATH=/c/Python38:/c/Python38/Scripts:$PATH' >> .travis.yml
echo 'install:' >> .travis.yml
echo '  - pip install -r requirements.txt' >> .travis.yml
echo '  - pip install codecov' >> .travis.yml
echo '  - pip install pytest-cov' >> .travis.yml
echo "script: coverage run -m pytest $PACKAGE_NAME/tests.py" >> .travis.yml
echo 'after_success:' >> .travis.yml
echo '  - codecov' >> .travis.yml

# creating folders and files
mkdir $PACKAGE_NAME
touch $PACKAGE_NAME/__init__.py  # we will stay this file empty
touch $PACKAGE_NAME/version.py
echo "VERSION: str = '1.1'" >> $PACKAGE_NAME/version.py

# creating examle module
touch $PACKAGE_NAME/example.py
echo "def hello_world():" >> $PACKAGE_NAME/example.py
echo "    print('Hello World')" >> $PACKAGE_NAME/example.py

# reading version
VERSION=$(cat $PACKAGE_NAME/version.py | grep 'VERSION' | sed -re "s/^[^=]*=\s* '([^ #]*)'.*$/\1/")

# sphinx quick start
sphinx-quickstart -q -p $PROJECT_NAME -a shmakovpn -v $VERSION -r $VERSION -l en --ext-autodoc --ext-intersphinx --ext-viewcode --ext-todo --sep $DOCS_DIR
## change sphinx theme to sphinx_rtd_theme
sed -i $DOCS_DIR/source/conf.py -re "s/^html_theme = 'alabaster'/html_theme = 'sphinx_rtd_theme'/"
## change imports
sed -i $DOCS_DIR/source/conf.py -re "s/^# import os/import os/"
sed -i $DOCS_DIR/source/conf.py -re "s/^# import sys/import sys/"
## configuring sys.path
sed -i $DOCS_DIR/source/conf.py -re "s/^# sys\.path\.insert\(0, os\.path\.abspath\('\.'\)\)/PACKAGE: str='$PACKAGE_NAME'\nTEMP_LABEL1/"
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL1/SCRIPT_DIR: str = os.path.dirname(os.path.abspath(__file__))\nTEMP_LABEL2/"
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL2/DOCS_DIR: str = os.path.dirname(SCRIPT_DIR)\nTEMP_LABEL3/"
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL3/PROJECT_DIR: str = os.path.dirname(DOCS_DIR)\nTEMP_LABEL4/"
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL4/PACKAGE_DIR: str = os.path.join(PROJECT_DIR, PACKAGE)\nTEMP_LABEL5/"
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL5/sys.path.insert(0, PACKAGE_DIR)\nTEMP_LABEL6/"
## configuring version
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL6/VERSION: str = ''\nTEMP_LABEL7/"
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL7/with open(os.path.join(PACKAGE_DIR, 'version.py')) as version_file:\nTEMP_LABEL8/"
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL8/    exec(version_file.read())\n\n/"
sed -i $DOCS_DIR/source/conf.py -re "s/^(version\s*=\s*).*/\1'$VERSION'/"  #* comment for vim highlight
sed -i $DOCS_DIR/source/conf.py -re "s/^(release\s*=\s*).*/\1'$VERSION'/" #* comment for vim hightlight

## creating contents.rst for readthedocs.io
touch $DOCS_DIR/source/contents.rst
echo ".. include:: index.rst" >> $DOCS_DIR/source/contents.rst

## creating introduction.rst
touch $DOCS_DIR/source/introduction.rst
echo "Introduction todo" >> $DOCS_DIR/source/introduction.rst

## adding introduction to index.rst
sed -i $DOCS_DIR/source/index.rst -re "s/^(\.\. toctree::)/.. include:: introduction.rst\n\n\1/"

## adding documentation (not package!) requirements
touch $DOCS_DIR/requirements.txt

## adding code documentation
touch $DOCS_DIR/source/code.rst
echo 'Code' >> $DOCS_DIR/source/code.rst
echo "====\n" >> $DOCS_DIR/source/code.rst
echo ".. automodule:: example" >> $DOCS_DIR/source/code.rst
echo ' :members:' >> $DOCS_DIR/source/code.rst

## adding code.rst to index.rst
sed -i $DOCS_DIR/source/index.rst -re 's/^(   :caption: Contents:)/\1\n\n   code/'

# adding license
touch LICENSE.txt
echo "Copyright $PACKAGE_NAME shmakovpn" >> LICENSE.txt
echo '
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
' >>  LICENSE.txt

# creating manifest
touch MANIFEST.in
echo 'include LICENSE.txt' >> MANIFEST.in
echo 'include setup.cfg' >> MANIFEST.in
echo 'include setup.py' >> MANIFEST.in
echo 'include makedoc.py' >> MANIFEST.in
echo 'include build_package.py' >> MANIFEST.in
echo '' >> MANIFEST.in
echo 'recursive-include test *' >> MANIFEST.in #* comment for vim highlight
echo 'recursive-include docs *' >> MANIFEST.in #* comment for vim highlight
echo '' >> MANIFEST.in
echo 'recursive-exclude docs/build *' >> MANIFEST.in  #* comment for vim highlight
echo 'recursive-exclude * __pycache__' >> MANIFEST.in  #* comment for vim highlight
echo 'recursive-exclude * *.py[co]' >> MANIFEST.in 
echo 'recursive-exclude .git *' >> MANIFEST.in  #* comment for vim highlight
echo 'recursive-exclude .idea *' >> MANIFEST.in  #* comment for vim highlight
echo 'recursive-exclude venv *' >> MANIFEST.in  #* comment for vim highlight

# creating setup.cfg
touch setup.cfg
echo '[build_sphinx]' >> setup.cfg
echo 'source-dir = docs/' >> setup.cfg
echo 'build-dir = docs/build' >> setup.cfg
echo 'all_files = 1' >> setup.cfg
echo '' >> setup.cfg
echo '[metadata]' >> setup.cfg
echo 'license_file = LICENSE.txt' >> setup.cfg

# creating setup.py
touch setup.py
echo "import os" >> setup.py
echo "from setuptools import setup, find_packages" >> setup.py
echo "from ${PACKAGE_NAME}.version import VERSION" >> setup.py
echo "" >> setup.py
echo "SCRIPT_DIR: str = os.path.dirname(os.path.abspath(__file__))" >> setup.py
echo "os.chdir(SCRIPT_DIR)" >> setup.py
echo "" >> setup.py
echo "with open('README.md') as f:" >> setup.py
echo "    long_description: str = f.read()" >> setup.py
echo "" >> setup.py
echo "setup(" >> setup.py
echo "    name='$PACKAGE_NAME'," >> setup.py
echo "    version=VERSION," >> setup.py
echo "    packages=find_packages()," >> setup.py
echo "    author='shmakovpn'," >> setup.py
echo "    author_email='shmakovpn@yandex.ru'," >> setup.py
echo "    url='https://github.com/shmakovpn/$PROJECT_NAME'," >> setup.py
echo "    download_url='https://github.com/shmakovpn/$PROJECT_NAME/archive/%s.zip' % (VERSION, )," >> setup.py
echo "    long_description=long_description," >> setup.py
echo "    long_description_content_type='text/markdown'," >> setup.py
echo "    entry_points={" >> setup.py
#echo "        'console_scripts': ['$PACKAGE_NAME=$PACKAGE_NAME:main']," >> setup.py
echo "    }," >> setup.py
echo "    install_requires=[" >> setup.py
#echo "        'chardet'," >> setup.py
echo "    ]," >> setup.py
echo "    include_package_data=True," >> setup.py
echo "    test_suite='$PACKAGE_NAME.tests'," >> setup.py
echo "    python_requires='>=3.6'," >> setup.py
echo "    classifiers=[" >> setup.py
echo "        'Programming Language :: Python :: 3'," >> setup.py
#echo "        'Environment :: Console'," >> setup.py
echo "        'License :: OSI Approved :: Apache Software License'," >> setup.py
echo "        'Operating System :: OS Independent'," >> setup.py
echo "    ]," >> setup.py
echo ")" >> setup.py

# creating build_package.py, script that runs *python setup.py sdist bdist_wheel*
touch build_package.py
echo "import os" >> build_package.py
echo "SCRIPT_DIR: str = os.path.dirname(os.path.abspath(__file__))" >> build_package.py
echo "" >> build_package.py
echo "" >> build_package.py
echo "def run_build():" >> build_package.py
echo "    os.chdir(SCRIPT_DIR)" >> build_package.py
echo "    os.system('python setup.py test')" >> build_package.py
echo "    os.system('python setup.py sdist bdist_wheel')" >> build_package.py
echo "    print('__END__')" >> build_package.py
echo "" >> build_package.py
echo "" >> build_package.py
echo "if __name__ == '__main__':" >> build_package.py
echo "    run_build()" >> build_package.py

# creating makedoc.py, script that runs *sphinx-build*
touch makedoc.py
echo "import os" >> makedoc.py
echo "SCRIPT_DIR: str = os.path.dirname(os.path.abspath(__file__))" >> makedoc.py
echo "" >> makedoc.py
echo "" >> makedoc.py
echo "def run_sphinx():" >> makedoc.py
echo "    docs_dir: str = os.path.join(SCRIPT_DIR, 'docs')" >> makedoc.py
echo "    docs_source_dir: str = os.path.join(docs_dir, 'source')" >> makedoc.py
echo "    build_dir: str = os.path.join(docs_dir, 'build')" >> makedoc.py
echo "    html_dir: str = os.path.join(build_dir, 'html')" >> makedoc.py
echo "    os.system('sphinx-build -b html \"%s\" \"%s\"' % (docs_source_dir, html_dir))" >> makedoc.py
echo "    print('__END__')" >> makedoc.py
echo "" >> makedoc.py
echo "" >> makedoc.py
echo "if __name__ == '__main__':" >> makedoc.py
echo "    run_sphinx()" >> makedoc.py

# creating upload_pypi.py
touch upload_pypi.py
echo "import os" >> upload_pypi.py
echo "import subprocess" >> upload_pypi.py
echo "from typing import List" >> upload_pypi.py
echo "from ${PACKAGE_NAME}.version import VERSION" >> upload_pypi.py
echo "" >> upload_pypi.py
echo "SCRIPT_DIR: str = os.path.dirname(os.path.abspath(__file__))" >> upload_pypi.py
echo "" >> upload_pypi.py
echo "" >> upload_pypi.py
echo "def get_pip_config():" >> upload_pypi.py
echo "    process: subprocess.Popen = subprocess.Popen(" >> upload_pypi.py
echo "        ['pip', 'config', 'list', ], stdout=subprocess.PIPE, stderr=subprocess.PIPE" >> upload_pypi.py
echo "    )" >> upload_pypi.py
echo "    process.wait()" >> upload_pypi.py
echo "    if not process.returncode:" >> upload_pypi.py
echo "        if process.stdout.readable():" >> upload_pypi.py
echo "            return list(map(lambda x: x.decode().rstrip(), process.stdout.readlines()))" >> upload_pypi.py
echo "        else:" >> upload_pypi.py
echo "            return []  # pip configuration is empty" >> upload_pypi.py
echo "    else:" >> upload_pypi.py
echo "        if process.stdout.readable():" >> upload_pypi.py
echo "            print(process.stdout.read().decode())" >> upload_pypi.py
echo "        if process.stderr.readable():" >> upload_pypi.py
echo "            print(process.stderr.read().decode())" >> upload_pypi.py
echo "        exit(1)" >> upload_pypi.py
echo "" >> upload_pypi.py
echo "" >> upload_pypi.py
echo "def run_upload():" >> upload_pypi.py
echo "    pip_certs: List[str] = list(filter(lambda x: str(x).startswith('global.cert='), get_pip_config()))" >> upload_pypi.py
echo "    if pip_certs:" >> upload_pypi.py
echo "        pip_cert_arg: str = '--cert %s ' % (pip_certs[0].split('=')[1])" >> upload_pypi.py
echo "    else:" >> upload_pypi.py
echo "        pip_cert_arg: str = ''" >> upload_pypi.py
echo "    print(pip_cert_arg)" >> upload_pypi.py
echo "    dist_dir: str = os.path.join(SCRIPT_DIR, 'dist')" >> upload_pypi.py
echo "    dist_file: str = os.path.join(dist_dir, '${PACKAGE_NAME}-%s.tar.gz' % (VERSION, ))" >> upload_pypi.py
echo "    dist_whls: str = os.path.join(dist_dir, '${PACKAGE_NAME}-%s-*.whl' % (VERSION, ))" >> upload_pypi.py  #* comment for vim highlight
echo "    os.system('twine upload \"%s\" \"%s\" %s --verbose' % (dist_file, dist_whls, pip_cert_arg))" >> upload_pypi.py
echo "    print('__end__')" >> upload_pypi.py
echo "" >> upload_pypi.py
echo "" >> upload_pypi.py
echo "if __name__ == '__main__':" >> upload_pypi.py
echo "    run_upload()" >> upload_pypi.py

# creating tests.py
touch $PACKAGE_NAME/tests.py
echo "import unittest" >> $PACKAGE_NAME/tests.py

Project details


Release history Release notifications | RSS feed

This version

1.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shmakovpn-1.1.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

shmakovpn-1.1-py3-none-any.whl (5.8 kB view details)

Uploaded Python 3

File details

Details for the file shmakovpn-1.1.tar.gz.

File metadata

  • Download URL: shmakovpn-1.1.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.8

File hashes

Hashes for shmakovpn-1.1.tar.gz
Algorithm Hash digest
SHA256 41e51d54cd48d09602350363c143839c995cf199e149e442628917289b8403bd
MD5 0e88a864048776b9dfe2284b878f12c1
BLAKE2b-256 7df921d866776517c547dac3a81a62c4a4633bd17b6ef25b22b743d6c6f7316d

See more details on using hashes here.

File details

Details for the file shmakovpn-1.1-py3-none-any.whl.

File metadata

  • Download URL: shmakovpn-1.1-py3-none-any.whl
  • Upload date:
  • Size: 5.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.8

File hashes

Hashes for shmakovpn-1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 06db222faf1c0a14a1d2816c0c9835c1ca1f02892762f7af6fa0d77d803c8a21
MD5 255a72f4063b2dff1142e62f5d6a834c
BLAKE2b-256 871d29c9c9aba99546b58e32d3f9e119c000d0d0e84c737f7c7653884ae33259

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page