From abc49a58d4a616f45b5ea874037370b24a57215d Mon Sep 17 00:00:00 2001 From: fireflyc Date: Thu, 4 Aug 2016 22:18:29 +0800 Subject: [PATCH] first commit --- MANIFEST.in | 1 + Makefile | 41 ++++++++++++++++++++++++++++++++ README.md | 5 ++++ etc/python-skeleton-logging.conf | 21 ++++++++++++++++ etc/python-skeleton.conf | 4 ++++ python_skeleton/__init__.py | 0 python_skeleton/cli.py | 28 ++++++++++++++++++++++ python_skeleton/demo.py | 7 ++++++ requirements.txt | 1 + setup.py | 21 ++++++++++++++++ tests/__init__.py | 0 tests/demo_test.py | 10 ++++++++ 12 files changed, 139 insertions(+) create mode 100644 MANIFEST.in create mode 100644 Makefile create mode 100644 README.md create mode 100644 etc/python-skeleton-logging.conf create mode 100644 etc/python-skeleton.conf create mode 100644 python_skeleton/__init__.py create mode 100644 python_skeleton/cli.py create mode 100644 python_skeleton/demo.py create mode 100644 requirements.txt create mode 100644 setup.py create mode 100644 tests/__init__.py create mode 100644 tests/demo_test.py diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..c0bb19c --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +include README.md requirements.txt \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5289dce --- /dev/null +++ b/Makefile @@ -0,0 +1,41 @@ +PGPIDENT="fireflyc" +PYTHON=python +PIP=pip +PIP_DOUBAN = -i http://pypi.douban.com/simple --trusted-host pypi.douban.com + +all: help + +help: + @echo "dist - distribute project." + @echo "build - Build project using current python." + @echo "test - Run unittests using current python." + @echo "clean - clean" + @echo " clean-pyc - Remove .pyc/__pycache__ files" + @echo " clean-build - Remove setup artifacts." + @echo "release - Make PyPI release." + +clean: clean-pyc clean-build + +release: + python setup.py register sdist bdist_wheel upload --sign --identity="$(PGPIDENT)" + +clean-pyc: + -find . -type f -a \( -name "*.pyc" -o -name "*$$py.class" \) | xargs rm + -find . -type d -name "__pycache__" | xargs rm -r + +clean-build: + rm -rf build/ dist/ .eggs/ *.egg-info/ + +test: + $(PYTHON) setup.py test + +build: + $(PYTHON) setup.py sdist bdist_wheel + +dist_3party: + mkdir -p dist/thirdparty/pipcache + $(PIP) download -r requirements.txt -d ./dist/thirdparty/pipcache $(PIP_DOUBAN) + cp requirements.txt dist/thirdparty/ + echo "pip install --no-index --find-links=pipcache -r requirements.txt">dist/thirdparty/install.sh + +dist: clean build dist_3party \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..b582fc8 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +#Python项目骨架 +建议使用virtualenv构建开发环境 + +* `pip install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com` 安装依赖 +* `python setup.py develop` link开发环境 diff --git a/etc/python-skeleton-logging.conf b/etc/python-skeleton-logging.conf new file mode 100644 index 0000000..cecd031 --- /dev/null +++ b/etc/python-skeleton-logging.conf @@ -0,0 +1,21 @@ +[loggers] +keys=root + +[handlers] +keys=stream_handler + +[formatters] +keys=formatter + +[logger_root] +level=DEBUG +handlers=stream_handler + +[handler_stream_handler] +class=StreamHandler +level=DEBUG +formatter=formatter +args=(sys.stderr,) + +[formatter_formatter] +format=%(asctime)s %(name)-12s %(levelname)-8s %(message)s \ No newline at end of file diff --git a/etc/python-skeleton.conf b/etc/python-skeleton.conf new file mode 100644 index 0000000..1b2c454 --- /dev/null +++ b/etc/python-skeleton.conf @@ -0,0 +1,4 @@ +[database] +host = localhost +username = root +password = root123 \ No newline at end of file diff --git a/python_skeleton/__init__.py b/python_skeleton/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python_skeleton/cli.py b/python_skeleton/cli.py new file mode 100644 index 0000000..1b60c6a --- /dev/null +++ b/python_skeleton/cli.py @@ -0,0 +1,28 @@ +import ConfigParser +import click + +from python_skeleton.demo import Demo +from python_skeleton.lib import log + + +@click.command() +@click.option("--config-file", required=True, default="/etc/python-skeleton/python-skeleton.conf", help="config file", type=click.Path(exists=True)) +@click.option("--logging-file", required=True, default="/etc/python-skeleton/python-skeleton-logging.conf", help="logging file", type=click.Path(exists=True)) +def main(config_file, logging_file): + log.setup_logging(logging_file) + + config = ConfigParser.ConfigParser() + config.read(config_file) + demo = Demo() + demo.hello("fireflyc") +m + +if __name__ == "__main__": + import os + import sys + + parent_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + etc_path = os.path.join(parent_path, "etc") + sys.argv.append("--config-file=" + os.path.join(etc_path, "python-skeleton.conf")) + sys.argv.append("--logging-file=" + os.path.join(etc_path, "python-skeleton-logging.conf")) + main() diff --git a/python_skeleton/demo.py b/python_skeleton/demo.py new file mode 100644 index 0000000..2907943 --- /dev/null +++ b/python_skeleton/demo.py @@ -0,0 +1,7 @@ +from python_skeleton.lib.log import LogMixin + + +class Demo(LogMixin): + def hello(self, name): + self.logger.info("demo %s", name) + return "Hello, " + name diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..79a747e --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +click==6.6 \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..6b22c57 --- /dev/null +++ b/setup.py @@ -0,0 +1,21 @@ +# coding=utf-8 +from setuptools import setup, find_packages +from pip.req import parse_requirements + +setup( + name="python-skeleton", + version="0.0.1", + description="python skeleton demo", + long_description=open("README.md").read(), + author="fireflyc", + author_email="fireflyc@126.com", + url="", + license="", + packages=find_packages(exclude=("tests", "docs", "etc")), + install_requires=[str(ir.req) for ir in parse_requirements("requirements.txt", session=False)], + test_suite="tests", + entry_points=""" + [console_scripts] + python-skeleton=python_skeleton.cli:main + """ +) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/demo_test.py b/tests/demo_test.py new file mode 100644 index 0000000..6cede93 --- /dev/null +++ b/tests/demo_test.py @@ -0,0 +1,10 @@ +from unittest import TestCase +from python_skeleton.demo import Demo + + +class DemoTestCase(TestCase): + def setUp(self): + self.demo = Demo() + + def test_hello(self): + assert self.demo.hello("World") == "Hello, World"