Skip to main content

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='$PROJECT_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

Metadata

Release files for shmakovpn-tools 1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for shmakovpn-tools 1.1
File Size Uploaded Provenance Actions
shmakovpn_tools-1.1.tar.gz 9.4 kB Without provenance Details for shmakovpn_tools-1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for shmakovpn-tools 1.1
File Interpreter ABI Platform Actions
shmakovpn_tools-1.1-py3-none-any.whl Python 3 none any Details for shmakovpn_tools-1.1-py3-none-any.whl

Total release size: 15.3 kB

Release files / shmakovpn_tools-1.1.tar.gz

Download URL shmakovpn_tools-1.1.tar.gz
Size 9.4 kB
Tags Source
SHA-256 checksum
How to use checksums
70b8cbb6ef7f67b97631ebd809bccde0d1e72e19794c640264990cd67f51adfc
BLAKE2b-256 checksum
How to use checksums
4c1bf5fc869041658bf53e3d9e704d89ecc0ff94bec3d53b7fae7a9b56a0357f
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / shmakovpn_tools-1.1-py3-none-any.whl

Download URL shmakovpn_tools-1.1-py3-none-any.whl
Size 5.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bf4bf34d8acfc30783f6eec1d51129a5b20c73bd9c0edae8f6310cd2ac4cc789
BLAKE2b-256 checksum
How to use checksums
87baa2bd1b7ceda7e5995feb3e9ce773b4e3f10174ea9510de812a3557b22661
Upload date
Uploaded using Trusted Publishing?
What is 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

Security for shmakovpn-tools 1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page