diff --git a/.gitignore b/.gitignore index 11041c7..7bbc71c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,101 @@ -*.egg-info +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# dotenv +.env + +# virtualenv +.venv +venv/ +ENV/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..e7ca1d2 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,36 @@ +language: python + +matrix: + fast_finish: true + allow_failures: + - nightly + - 3.7-dev + - 3.6-dev + +python: + - '3.6' + - 3.6-dev + - 3.7-dev + - nightly + +install: + - pip install .[dev] + +script: + - python setup.py flake8 + - python setup.py test + - python setup.py doc + - python setup.py sdist + - python setup.py bdist_wheel + +deploy: + - provider: pypi + distributions: sdist bdist_wheel + user: Ovv + password: + secure: lldoHkBPyFjcMEWpOMzaXeNdNl1JUgodXfrm9TPT4DYNcQCDU01f6xm8uShBT47mz+tbrUnx2rFhZmTmZAqZDODo7pmkukSrhBRpbLroEp6045MmT4P4aJjoGJooksGouqOsJjqE8yGwyinCVsv0ZNi1RZDxxuUw3Ye+HtDllMNv4XUeEBxOY5LtKpGW/+MF0QZiDggvR2bcLlMJz2EJvtIzhdRtl7fy2eAdrsQoyXhqt7Zuu0y/sc4YTiRt1adLFFFOIDL6mtL76D2eHBQm5oHJM5TtZi0gs633567fyEZ6Gm9fxSo0Ba9L7sen6ApgJLx2yba1+7ititXg7/U7+DvgmFT3Tk294cBRGF/3rhzt60p1xYO1b6tyFK5GTPghidAJZb/OQoMb9L6iZhCmMCukvdW0/241yiLdSQfMbeCzO8diwpwsJiv7k8pWtGTtl2+PtuH26zyZZeuQpu3BlctF5r/hdaiuggoN87RzlOLwqbIRfHZfMGA24LJNbtyRcu3mvaZwFFrRq5NWYqwU2VHQB/plBvB4c+FRyKRIcbiN/G+31WEK3cuMPaKfXM0opJwVpLNA320IHgVxZu0b78Exr2Qs48cBYiEl/BtHYPRYDGscSI5LYZ5cPrGcrhp7Z6jBFTHenq+IW/O21qtxv1h9R9VXyatIGHSW0U/dLOA= + on: + repo: pyslackers/sir-bot-a-lot-2 + branch: master + python: '3.6' + tags: true diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..1e0477d --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,58 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making +participation in our project and our community a harassment-free experience for everyone. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take +appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, +issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any +contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the +project or its community. Examples of representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed representative at an online or offline +event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at +contact@ovv.wtf. The project team will review and investigate all complaints, and will respond in a way that it deems +appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter +of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent +repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at +[http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..dcc3908 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,177 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/sirbot.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/sirbot.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/sirbot" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/sirbot" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/docs/_static/.gitkeep b/docs/_static/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/conf.py b/docs/conf.py new file mode 100755 index 0000000..17d8390 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,295 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# sirbot documentation build configuration file, created by +# sphinx-quickstart on Tue Jul 9 22:26:36 2013. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import os +import sys + +# 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. +# sys.path.insert(0, os.path.abspath('.')) + +# Get the project root dir, which is the parent dir of this +cwd = os.getcwd() +project_root = os.path.dirname(cwd) + +# Insert the project root dir as the first element in the PYTHONPATH. +# This lets us ensure that the source package is imported, and that its +# version is used. +sys.path.insert(0, project_root) +import sirbot + +# -- General configuration --------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# needs_sphinx = '1.0' + +# 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.viewcode', + 'sphinxcontrib.asyncio', + 'sphinxcontrib.napoleon', + 'sphinx.ext.intersphinx' +] +suppress_warnings = ['image.nonlocal_uri'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +# source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'slack-sansio' +copyright = u"2017, Quentin Dawans" +author = 'Quentin Dawans' + +# The version info for the project you're documenting, acts as replacement +# for |version| and |release|, also used in various other places throughout +# the built documents. +# +# The short X.Y version. +version = sirbot.__version__ +# The full version, including alpha/beta/rc tags. +release = sirbot.__version__ + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# language = None + +# There are two options for replacing |today|: either, you set today to +# some non-false value, then it is used: +# today = '' +# Else, today_fmt is used as the format for a strftime call. +# today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +# default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +# add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +# add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +# show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +# modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built +# documents. +# keep_warnings = False + + +# -- 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 = 'alabaster' + +# Theme options are theme-specific and customize the look and feel of a +# theme further. For a list of options available for each theme, see the +# documentation. +html_theme_options = { + "github_user": "pyslackers", + "github_repo": "sir-bot-a-lot-2", + "github_type": "star", + "github_banner": True, + "travis_button": True, +} + +# Add any paths that contain custom themes here, relative to this directory. +# html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +# html_title = None + +# A shorter title for the navigation bar. Default is the same as +# html_title. +# html_short_title = None + +# The name of an image file (relative to this directory) to place at the +# top of the sidebar. +# html_logo = '../icon/icon.png' + +# The name of an image file (within the static path) to use as favicon +# of the docs. This file should be a Windows icon file (.ico) being +# 16x16 or 32x32 pixels large. +# html_favicon = None + +# 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'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page +# bottom, using the given strftime format. +# html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +# html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +html_sidebars = { + '**': [ + 'about.html', + 'navigation.html', + 'relations.html', + 'searchbox.html', + 'donate.html', + ] +} +# Additional templates that should be rendered to pages, maps page names +# to template names. +# html_additional_pages = {} + +# If false, no module index is generated. +# html_domain_indices = True + +# If false, no index is generated. +# html_use_index = True + +# If true, the index is split into individual pages for each letter. +# html_split_index = False + +# If true, links to the reST sources are added to the pages. +# html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. +# Default is True. +# html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. +# Default is True. +# html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages +# will contain a tag referring to it. The value of this option +# must be the base URL from which the finished HTML is served. +# html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +# html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'slack-sansio-doc' + +# -- Options for LaTeX output ------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # 'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass +# [howto/manual]). +latex_documents = [ + (master_doc, 'sir-bot-a-lot-2.tex', + 'sir-bot-a-lot-2 Documentation', + 'Quentin Dawans', 'manual'), +] + +# The name of an image file (relative to this directory) to place at +# the top of the title page. +# latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings +# are parts, not chapters. +# latex_use_parts = False + +# If true, show page references after internal links. +# latex_show_pagerefs = False + +# If true, show URL addresses after external links. +# latex_show_urls = False + +# Documents to append as an appendix to all manuals. +# latex_appendices = [] + +# If false, no module index is generated. +# latex_domain_indices = True + + +# -- Options for manual page output ------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'sir-bot-a-lot-2', + 'sir-bot-a-lot-2 Documentation', + [author], 1) +] + +# If true, show URL addresses after external links. +# man_show_urls = False + + +# -- Options for Texinfo output ---------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'sir-bot-a-lot-2', 'sir-bot-a-lot-2 Documentation', + author, 'sir-bot-a-lot-2', + 'Rewrite of sir-bot-a-lot.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +# texinfo_appendices = [] + +# If false, no module index is generated. +# texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +# texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +# texinfo_no_detailmenu = False + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'https://docs.python.org/3/': None} diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..751ff8e --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,3 @@ +=============== +Sir-bot-a-lot-2 +=============== diff --git a/requirements.txt b/requirements.txt index 3bcb4e2..f9e3f8e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,46 @@ aiohttp==2.3.6 +alabaster==0.7.10 async-timeout==2.0.0 +asynctest==0.11.1 +attrs==17.3.0 +Babel==2.5.1 +certifi==2017.11.5 chardet==3.0.4 +coverage==4.4.2 +docutils==0.14 +flake8==3.5.0 +gidgethub==2.4.1 +idna==2.6 +imagesize==0.7.1 +Jinja2==2.10 +MarkupSafe==1.0 +mccabe==0.6.1 multidict==3.3.2 -slack-sansio==0.3.0 +pluggy==0.6.0 +pockets==0.5.1 +py==1.5.2 +pycodestyle==2.3.1 +pyflakes==1.6.0 +Pygments==2.2.0 +pytest==3.3.1 +pytest-asyncio==0.8.0 +pytest-cov==2.5.1 +pytest-cover==3.0.0 +pytest-coverage==0.0 +pytest-runner==3.0 +pytoml==0.1.14 +pytz==2017.3 +requests==2.18.4 +requests-download==0.1.2 +six==1.11.0 +slack-sansio==0.2.2 +snowballstemmer==1.2.1 +Sphinx==1.6.5 +sphinxcontrib-asyncio==0.2.0 +sphinxcontrib-napoleon==0.6.1 +sphinxcontrib-websupport==1.0.1 +tox==2.9.1 +uritemplate==3.0.0 +urllib3==1.22 +virtualenv==15.1.0 yarl==0.16.0 diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..40969c0 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,27 @@ +[metadata] +description-file = README.rst + +[tool:pytest] +addopts= --verbose --cov=sirbot/ --cov-report term-missing + +[aliases] +doc=build_sphinx +test=pytest + +[build_sphinx] +source-dir = docs/ +build-dir = docs/_build +warning-is-error = 1 + +[flake8] +ignore = E203 +max-line-length = 120 +max-complexity = 10 +exclude = + .git, + __pycache__, + docs/source/conf.py, + old, + build, + dist, + .tox diff --git a/setup.py b/setup.py index adb9e0d..07865ee 100644 --- a/setup.py +++ b/setup.py @@ -1,8 +1,4 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- import sys -import codecs - import pathlib import setuptools @@ -12,6 +8,19 @@ LONG_DESCRIPTION = pathlib.Path('README.rst').read_text('utf-8') +requires = { + 'install': ['aiohttp'], + 'slack': ['slack-sansio'], + 'github': ['gidgethub'], + 'setup': ['pytest-runner'], + 'tests': ['flake8', 'pytest>=3.3.0', 'coverage', 'pytest-coverage', 'pytest-asyncio', 'asynctest'], + 'full': set(), + 'doc': {'sphinx', 'sphinxcontrib-asyncio', 'sphinxcontrib-napoleon'}, + 'dev': {'tox'}, +} +requires['dev'].update(*requires.values()) +requires['full'].update(requires['install'], requires['slack'], requires['github']) + def find_version(): with open("sirbot/__version__.py") as f: @@ -22,42 +31,23 @@ def find_version(): return version -def parse_reqs(req_path='./requirements/requirements.txt'): - """Recursively parse requirements from nested pip files.""" - install_requires = [] - with codecs.open(req_path, 'r') as handle: - # remove comments and empty lines - lines = (line.strip() for line in handle if line.strip() and not line.startswith('#')) - install_requires.extend(lines) - return install_requires - - setuptools.setup( + name='sirbot', long_description=LONG_DESCRIPTION, + description='Rewrite of sir-bot-a-lot', keywords=[ 'sirbot', 'chatbot', 'bot', 'slack', ], - # To provide executable scripts, use entry points in preference to the - # "scripts" keyword. Entry points provide cross-platform support and - # allow pip to create the appropriate form of executable for the - # target platform. - # entry_points={ - # 'console_scripts': [ - # 'sirbot=sirbot.cli:main' - # ] - # }, - include_package_data=True, - install_requires=parse_reqs('requirements.txt'), + packages=setuptools.find_packages(), + zip_safe=True, python_requires='~=3.6', - tests_require=[ - 'pytest-runner', - 'pytest-cov', - 'pytest-aiohttp', - 'pytest', - ], + install_requires=requires['install'], + setup_requires=requires['setup'], + tests_require=requires['tests'], + extras_require=requires, # See: http://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ 'Development Status :: 2 - Pre-Alpha', @@ -67,15 +57,12 @@ def parse_reqs(req_path='./requirements/requirements.txt'): 'Natural Language :: English', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.6', - 'Environment :: Console', ], author=( 'Ovv ', ), - author_email='pythondev.slack@gmail.com', - description='The good Sir Bot-a-lot. An asynchronous python bot framework.', + author_email='contact@ovv.wtf', license='MIT', - name='sir-bot-a-lot', - url='https://github.com/pyslackers/sir-bot-a-lot', + url='https://github.com/pyslackers/sir-bot-a-lot2', version=find_version(), ) diff --git a/sirbot/__init__.py b/sirbot/__init__.py index b99f8d6..a632a89 100644 --- a/sirbot/__init__.py +++ b/sirbot/__init__.py @@ -23,5 +23,5 @@ # / _____ \ ------- | `----.| `--' | | | # /__/ \__\ |_______| \______/ |__| -from .__version__ import __version__ -from .bot import SirBot +from .__version__ import __version__ # noQa: F401 +from .bot import SirBot # noQa: F401 diff --git a/sirbot/plugins/__init__.py b/sirbot/plugins/__init__.py index 2961ef2..e69de29 100644 --- a/sirbot/plugins/__init__.py +++ b/sirbot/plugins/__init__.py @@ -1 +0,0 @@ -from . import slack diff --git a/sirbot/plugins/github/__init__.py b/sirbot/plugins/github/__init__.py index d235254..d986474 100644 --- a/sirbot/plugins/github/__init__.py +++ b/sirbot/plugins/github/__init__.py @@ -1 +1 @@ -from .plugin import GithubPlugin +from .plugin import GithubPlugin # noQa: F401 diff --git a/sirbot/plugins/github/plugin.py b/sirbot/plugins/github/plugin.py index 0f283d8..929bcb2 100644 --- a/sirbot/plugins/github/plugin.py +++ b/sirbot/plugins/github/plugin.py @@ -33,7 +33,7 @@ async def dispatch(request): try: event = Event.from_http(request.headers, payload, secret=github.verify) await github.router.dispatch(event, app=request.app) - except ValidationFailure as e: + except ValidationFailure: LOG.debug('Github webhook failed verification: %s, %s', request.headers, payload) except Exception as e: LOG.exception(e) diff --git a/sirbot/plugins/slack/__init__.py b/sirbot/plugins/slack/__init__.py index 6dd75d7..9325506 100644 --- a/sirbot/plugins/slack/__init__.py +++ b/sirbot/plugins/slack/__init__.py @@ -1 +1 @@ -from .plugin import SlackPlugin +from .plugin import SlackPlugin # noQa: F401 diff --git a/sirbot/plugins/slack/plugin.py b/sirbot/plugins/slack/plugin.py index 70ed9f5..4fe0604 100644 --- a/sirbot/plugins/slack/plugin.py +++ b/sirbot/plugins/slack/plugin.py @@ -57,7 +57,7 @@ def on_command(self, command, handler): if not asyncio.iscoroutinefunction(handler): handler = asyncio.coroutine(handler) self.routers['command'].register(command, handler) - + def on_message(self, pattern, handler, flags=0, channel='*', mention=False, admin=False): if not asyncio.iscoroutinefunction(handler): handler = asyncio.coroutine(handler) @@ -78,5 +78,8 @@ async def find_bot_id(self, app): self.bot_id = rep['user']['profile']['bot_id'] async def find_bot_user_id(self, app): - rep = await self.api.query(url=methods.CHAT_POST_MESSAGE, data={'channel': 'general', 'text': 'Looking for bot id'}) + rep = await self.api.query( + url=methods.CHAT_POST_MESSAGE, + data={'channel': 'general', 'text': 'Looking for bot id'} + ) LOG.warning('The BOT_USER_ID is : "%s"', rep['message']['user']) diff --git a/tests/test_sirbot.py b/tests/test_sirbot.py new file mode 100644 index 0000000..10558ad --- /dev/null +++ b/tests/test_sirbot.py @@ -0,0 +1,4 @@ + + +def test_sirbot(): + assert True diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..614377d --- /dev/null +++ b/tox.ini @@ -0,0 +1,28 @@ +[tox] +envlist = flake8, build, docs, py36 + +[testenv:flake8] +basepython=python3.6 +deps=flake8 +commands= + python setup.py flake8 + +[testenv:build] +basepython=python3.6 +commands = + python setup.py sdist + python setup.py bdist_wheel + +[testenv:docs] +basepython=python3.6 +extras = + doc + full +commands = + python setup.py doc + +[testenv] +extras = + tests +commands = + python setup.py test