🤝 merge with master, 0.5.20
This commit is contained in:
commit
f3fb3cf088
|
@ -1,6 +1,7 @@
|
|||
requires:
|
||||
- type: git
|
||||
url: https://github.com/moremoban/pypi-mobans
|
||||
branch: dev
|
||||
submodule: true
|
||||
- https://github.com/pyexcel/pyexcel-mobans
|
||||
configuration:
|
||||
|
|
|
@ -13,8 +13,8 @@ python:
|
|||
- 2.7
|
||||
|
||||
stages:
|
||||
- test
|
||||
- lint
|
||||
- test
|
||||
|
||||
.disable_global: &disable_global
|
||||
addons: false
|
||||
|
|
|
@ -1,6 +1,15 @@
|
|||
Change log
|
||||
================================================================================
|
||||
|
||||
0.5.20 - 17.7.2019
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
updated
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
#. `#70 <https://github.com/pyexcel/pyexcel-io/issues/70>`_: when the given file
|
||||
is a root directory, the error shall read it is not a file
|
||||
|
||||
0.5.19 - 14.7.2019
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
|
222
README.rst
222
README.rst
|
@ -1,124 +1,14 @@
|
|||
================================================================================
|
||||
pyexcel-io - Let you focus on data, instead of file formats
|
||||
================================================================================
|
||||
{%extends "BASIC-README.rst.jj2"%}
|
||||
|
||||
.. image:: https://raw.githubusercontent.com/pyexcel/pyexcel.github.io/master/images/patreon.png
|
||||
:target: https://www.patreon.com/pyexcel
|
||||
{%block features%}
|
||||
|
||||
.. image:: https://api.bountysource.com/badge/team?team_id=288537
|
||||
:target: https://salt.bountysource.com/teams/chfw-pyexcel
|
||||
|
||||
.. image:: https://travis-ci.org/pyexcel/pyexcel-io.svg?branch=master
|
||||
:target: http://travis-ci.org/pyexcel/pyexcel-io
|
||||
|
||||
.. image:: https://codecov.io/gh/pyexcel/pyexcel-io/branch/master/graph/badge.svg
|
||||
:target: https://codecov.io/gh/pyexcel/pyexcel-io
|
||||
|
||||
.. image:: https://img.shields.io/gitter/room/gitterHQ/gitter.svg
|
||||
:target: https://gitter.im/pyexcel/Lobby
|
||||
|
||||
.. image:: https://readthedocs.org/projects/pyexcel-io/badge/?version=latest
|
||||
:target: http://pyexcel-io.readthedocs.org/en/latest/
|
||||
|
||||
Support the project
|
||||
================================================================================
|
||||
|
||||
If your company has embedded pyexcel and its components into a revenue generating
|
||||
product, please support me on `patreon <https://www.patreon.com/bePatron?u=5537627>`_
|
||||
or `bounty source <https://salt.bountysource.com/teams/chfw-pyexcel>`_ to maintain
|
||||
the project and develop it further.
|
||||
|
||||
If you are an individual, you are welcome to support me too and for however long
|
||||
you feel like. As my backer, you will receive
|
||||
`early access to pyexcel related contents <https://www.patreon.com/pyexcel/posts>`_.
|
||||
|
||||
And your issues will get prioritized if you would like to become my patreon as `pyexcel pro user`.
|
||||
|
||||
With your financial support, I will be able to invest
|
||||
a little bit more time in coding, documentation and writing interesting posts.
|
||||
|
||||
|
||||
Known constraints
|
||||
==================
|
||||
|
||||
Fonts, colors and charts are not supported.
|
||||
|
||||
Introduction
|
||||
================================================================================
|
||||
|
||||
**pyexcel-io** provides **one** application programming interface(API) to read
|
||||
**{{name}}** provides **one** application programming interface(API) to read
|
||||
and write the data in excel format, import the data into and export the data
|
||||
from database. It provides support for csv(z) format, django database and
|
||||
sqlalchemy supported databases. Its supported file formats are extended to cover
|
||||
"xls", "xlsx", "ods" by the following extensions:
|
||||
|
||||
.. _file-format-list:
|
||||
.. _a-map-of-plugins-and-file-formats:
|
||||
|
||||
.. table:: A list of file formats supported by external plugins
|
||||
|
||||
======================== ======================= ================= ==================
|
||||
Package name Supported file formats Dependencies Python versions
|
||||
======================== ======================= ================= ==================
|
||||
`pyexcel-io`_ csv, csvz [#f1]_, tsv, 2.6, 2.7, 3.3,
|
||||
tsvz [#f2]_ 3.4, 3.5, 3.6
|
||||
pypy
|
||||
`pyexcel-xls`_ xls, xlsx(read only), `xlrd`_, same as above
|
||||
xlsm(read only) `xlwt`_
|
||||
`pyexcel-xlsx`_ xlsx `openpyxl`_ same as above
|
||||
`pyexcel-ods3`_ ods `pyexcel-ezodf`_, 2.6, 2.7, 3.3, 3.4
|
||||
lxml 3.5, 3.6
|
||||
`pyexcel-ods`_ ods `odfpy`_ same as above
|
||||
======================== ======================= ================= ==================
|
||||
|
||||
.. table:: Dedicated file reader and writers
|
||||
|
||||
======================== ======================= ================= ==================
|
||||
Package name Supported file formats Dependencies Python versions
|
||||
======================== ======================= ================= ==================
|
||||
`pyexcel-xlsxw`_ xlsx(write only) `XlsxWriter`_ Python 2 and 3
|
||||
`pyexcel-xlsxr`_ xlsx(read only) lxml same as above
|
||||
`pyexcel-xlsbr`_ xlsx(read only) pyxlsb same as above
|
||||
`pyexcel-odsr`_ read only for ods, fods lxml same as above
|
||||
`pyexcel-odsw`_ write only for ods loxun same as above
|
||||
`pyexcel-htmlr`_ html(read only) lxml,html5lib same as above
|
||||
`pyexcel-pdfr`_ pdf(read only) pdftables Python 2 only.
|
||||
======================== ======================= ================= ==================
|
||||
|
||||
|
||||
.. _pyexcel-io: https://github.com/pyexcel/pyexcel-io
|
||||
.. _pyexcel-xls: https://github.com/pyexcel/pyexcel-xls
|
||||
.. _pyexcel-xlsx: https://github.com/pyexcel/pyexcel-xlsx
|
||||
.. _pyexcel-ods: https://github.com/pyexcel/pyexcel-ods
|
||||
.. _pyexcel-ods3: https://github.com/pyexcel/pyexcel-ods3
|
||||
.. _pyexcel-odsr: https://github.com/pyexcel/pyexcel-odsr
|
||||
.. _pyexcel-odsw: https://github.com/pyexcel/pyexcel-odsw
|
||||
.. _pyexcel-pdfr: https://github.com/pyexcel/pyexcel-pdfr
|
||||
|
||||
.. _pyexcel-xlsxw: https://github.com/pyexcel/pyexcel-xlsxw
|
||||
.. _pyexcel-xlsxr: https://github.com/pyexcel/pyexcel-xlsxr
|
||||
.. _pyexcel-xlsbr: https://github.com/pyexcel/pyexcel-xlsbr
|
||||
.. _pyexcel-htmlr: https://github.com/pyexcel/pyexcel-htmlr
|
||||
|
||||
.. _xlrd: https://github.com/python-excel/xlrd
|
||||
.. _xlwt: https://github.com/python-excel/xlwt
|
||||
.. _openpyxl: https://bitbucket.org/openpyxl/openpyxl
|
||||
.. _XlsxWriter: https://github.com/jmcnamara/XlsxWriter
|
||||
.. _pyexcel-ezodf: https://github.com/pyexcel/pyexcel-ezodf
|
||||
.. _odfpy: https://github.com/eea/odfpy
|
||||
|
||||
|
||||
In order to manage the list of plugins installed, you need to use pip to add or remove
|
||||
a plugin. When you use virtualenv, you can have different plugins per virtual
|
||||
environment. In the situation where you have multiple plugins that does the same thing
|
||||
in your environment, you need to tell pyexcel which plugin to use per function call.
|
||||
For example, pyexcel-ods and pyexcel-odsr, and you want to get_array to use pyexcel-odsr.
|
||||
You need to append get_array(..., library='pyexcel-odsr').
|
||||
|
||||
.. rubric:: Footnotes
|
||||
|
||||
.. [#f1] zipped csv file
|
||||
.. [#f2] zipped tsv file
|
||||
{% include "io-plugins-list.rst.jj2" %}
|
||||
|
||||
If you need to manipulate the data, you might do it yourself or use its brother
|
||||
library `pyexcel <https://github.com/pyexcel/pyexcel>`__ .
|
||||
|
@ -126,106 +16,4 @@ library `pyexcel <https://github.com/pyexcel/pyexcel>`__ .
|
|||
If you would like to extend it, you may use it to write your own
|
||||
extension to handle a specific file format.
|
||||
|
||||
|
||||
|
||||
|
||||
Installation
|
||||
================================================================================
|
||||
|
||||
You can install pyexcel-io via pip:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ pip install pyexcel-io
|
||||
|
||||
|
||||
or clone it and install it:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git clone https://github.com/pyexcel/pyexcel-io.git
|
||||
$ cd pyexcel-io
|
||||
$ python setup.py install
|
||||
|
||||
|
||||
|
||||
Development guide
|
||||
================================================================================
|
||||
|
||||
Development steps for code changes
|
||||
|
||||
#. git clone https://github.com/pyexcel/pyexcel-io.git
|
||||
#. cd pyexcel-io
|
||||
|
||||
Upgrade your setup tools and pip. They are needed for development and testing only:
|
||||
|
||||
#. pip install --upgrade setuptools pip
|
||||
|
||||
Then install relevant development requirements:
|
||||
|
||||
#. pip install -r rnd_requirements.txt # if such a file exists
|
||||
#. pip install -r requirements.txt
|
||||
#. pip install -r tests/requirements.txt
|
||||
|
||||
Once you have finished your changes, please provide test case(s), relevant documentation
|
||||
and update CHANGELOG.rst.
|
||||
|
||||
.. note::
|
||||
|
||||
As to rnd_requirements.txt, usually, it is created when a dependent
|
||||
library is not released. Once the dependecy is installed
|
||||
(will be released), the future
|
||||
version of the dependency in the requirements.txt will be valid.
|
||||
|
||||
|
||||
How to test your contribution
|
||||
------------------------------
|
||||
|
||||
Although `nose` and `doctest` are both used in code testing, it is adviable that unit tests are put in tests. `doctest` is incorporated only to make sure the code examples in documentation remain valid across different development releases.
|
||||
|
||||
On Linux/Unix systems, please launch your tests like this::
|
||||
|
||||
$ make
|
||||
|
||||
On Windows systems, please issue this command::
|
||||
|
||||
> test.bat
|
||||
|
||||
How to update test environment and update documentation
|
||||
---------------------------------------------------------
|
||||
|
||||
Additional steps are required:
|
||||
|
||||
#. pip install moban
|
||||
#. git clone https://github.com/moremoban/setupmobans.git # generic setup
|
||||
#. git clone https://github.com/pyexcel/pyexcel-commons.git commons
|
||||
#. make your changes in `.moban.d` directory, then issue command `moban`
|
||||
|
||||
What is pyexcel-commons
|
||||
---------------------------------
|
||||
|
||||
Many information that are shared across pyexcel projects, such as: this developer guide, license info, etc. are stored in `pyexcel-commons` project.
|
||||
|
||||
What is .moban.d
|
||||
---------------------------------
|
||||
|
||||
`.moban.d` stores the specific meta data for the library.
|
||||
|
||||
Acceptance criteria
|
||||
-------------------
|
||||
|
||||
#. Has Test cases written
|
||||
#. Has all code lines tested
|
||||
#. Passes all Travis CI builds
|
||||
#. Has fair amount of documentation if your change is complex
|
||||
#. run 'make format' so as to confirm the pyexcel organisation's coding style
|
||||
#. Please update CHANGELOG.rst
|
||||
#. Please add yourself to CONTRIBUTORS.rst
|
||||
#. Agree on NEW BSD License for your contribution
|
||||
|
||||
|
||||
|
||||
License
|
||||
================================================================================
|
||||
|
||||
New BSD License
|
||||
{%endblock%}
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
name: pyexcel-io
|
||||
organisation: pyexcel
|
||||
releases:
|
||||
- changes:
|
||||
- action: updated
|
||||
details:
|
||||
- '`#70`: when the given file is a root directory, the error shall read it is not a file'
|
||||
version: 0.5.20
|
||||
date: 17.7.2019
|
||||
- changes:
|
||||
- action: updated
|
||||
details:
|
||||
|
|
|
@ -22,7 +22,7 @@ author = 'C.W.'
|
|||
# The short X.Y version
|
||||
version = '0.6.0'
|
||||
# The full version, including alpha/beta/rc tags
|
||||
release = '0.5.19'
|
||||
release = '0.5.20'
|
||||
|
||||
# -- General configuration ---------------------------------------------------
|
||||
|
||||
|
@ -69,4 +69,4 @@ html_static_path = ['static']
|
|||
# -- Options for intersphinx extension ---------------------------------------
|
||||
|
||||
# Example configuration for intersphinx: refer to the Python standard library.
|
||||
intersphinx_mapping = {'https://docs.python.org/': None}
|
||||
intersphinx_mapping = {'https://docs.python.org/': None}
|
||||
|
|
|
@ -3,16 +3,7 @@
|
|||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
`pyexcel-io` - Let you focus on data, instead of file formats
|
||||
================================================================================
|
||||
|
||||
:Author: C.W.
|
||||
:Source code: http://github.com/pyexcel/pyexcel-io.git
|
||||
:Issues: http://github.com/pyexcel/pyexcel-io/issues
|
||||
:License: New BSD License
|
||||
:Development: |release|
|
||||
:Released: |version|
|
||||
:Generated: |today|
|
||||
{%include "header.rst.jj2" %}
|
||||
|
||||
Introduction
|
||||
--------------------------------------------------------------------------------
|
||||
|
@ -42,91 +33,11 @@ as of 2014. They are invented and supported by `pyexcel-io`_.
|
|||
Installation
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
You can install pyexcel-io via pip:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ pip install pyexcel-io
|
||||
|
||||
|
||||
or clone it and install it:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git clone https://github.com/pyexcel/pyexcel-io.git
|
||||
$ cd pyexcel-io
|
||||
$ python setup.py install
|
||||
{%include "installation.rst.jj2" %}
|
||||
|
||||
For individual excel file formats, please install them as you wish:
|
||||
|
||||
.. _file-format-list:
|
||||
.. _a-map-of-plugins-and-file-formats:
|
||||
|
||||
.. table:: A list of file formats supported by external plugins
|
||||
|
||||
======================== ======================= ================= ==================
|
||||
Package name Supported file formats Dependencies Python versions
|
||||
======================== ======================= ================= ==================
|
||||
`pyexcel-io`_ csv, csvz [#f1]_, tsv, 2.6, 2.7, 3.3,
|
||||
tsvz [#f2]_ 3.4, 3.5, 3.6
|
||||
pypy
|
||||
`pyexcel-xls`_ xls, xlsx(read only), `xlrd`_, same as above
|
||||
xlsm(read only) `xlwt`_
|
||||
`pyexcel-xlsx`_ xlsx `openpyxl`_ same as above
|
||||
`pyexcel-ods3`_ ods `pyexcel-ezodf`_, 2.6, 2.7, 3.3, 3.4
|
||||
lxml 3.5, 3.6
|
||||
`pyexcel-ods`_ ods `odfpy`_ same as above
|
||||
======================== ======================= ================= ==================
|
||||
|
||||
.. table:: Dedicated file reader and writers
|
||||
|
||||
======================== ======================= ================= ==================
|
||||
Package name Supported file formats Dependencies Python versions
|
||||
======================== ======================= ================= ==================
|
||||
`pyexcel-xlsxw`_ xlsx(write only) `XlsxWriter`_ Python 2 and 3
|
||||
`pyexcel-xlsxr`_ xlsx(read only) lxml same as above
|
||||
`pyexcel-xlsbr`_ xlsx(read only) pyxlsb same as above
|
||||
`pyexcel-odsr`_ read only for ods, fods lxml same as above
|
||||
`pyexcel-odsw`_ write only for ods loxun same as above
|
||||
`pyexcel-htmlr`_ html(read only) lxml,html5lib same as above
|
||||
`pyexcel-pdfr`_ pdf(read only) pdftables Python 2 only.
|
||||
======================== ======================= ================= ==================
|
||||
|
||||
|
||||
.. _pyexcel-io: https://github.com/pyexcel/pyexcel-io
|
||||
.. _pyexcel-xls: https://github.com/pyexcel/pyexcel-xls
|
||||
.. _pyexcel-xlsx: https://github.com/pyexcel/pyexcel-xlsx
|
||||
.. _pyexcel-ods: https://github.com/pyexcel/pyexcel-ods
|
||||
.. _pyexcel-ods3: https://github.com/pyexcel/pyexcel-ods3
|
||||
.. _pyexcel-odsr: https://github.com/pyexcel/pyexcel-odsr
|
||||
.. _pyexcel-odsw: https://github.com/pyexcel/pyexcel-odsw
|
||||
.. _pyexcel-pdfr: https://github.com/pyexcel/pyexcel-pdfr
|
||||
|
||||
.. _pyexcel-xlsxw: https://github.com/pyexcel/pyexcel-xlsxw
|
||||
.. _pyexcel-xlsxr: https://github.com/pyexcel/pyexcel-xlsxr
|
||||
.. _pyexcel-xlsbr: https://github.com/pyexcel/pyexcel-xlsbr
|
||||
.. _pyexcel-htmlr: https://github.com/pyexcel/pyexcel-htmlr
|
||||
|
||||
.. _xlrd: https://github.com/python-excel/xlrd
|
||||
.. _xlwt: https://github.com/python-excel/xlwt
|
||||
.. _openpyxl: https://bitbucket.org/openpyxl/openpyxl
|
||||
.. _XlsxWriter: https://github.com/jmcnamara/XlsxWriter
|
||||
.. _pyexcel-ezodf: https://github.com/pyexcel/pyexcel-ezodf
|
||||
.. _odfpy: https://github.com/eea/odfpy
|
||||
|
||||
|
||||
In order to manage the list of plugins installed, you need to use pip to add or remove
|
||||
a plugin. When you use virtualenv, you can have different plugins per virtual
|
||||
environment. In the situation where you have multiple plugins that does the same thing
|
||||
in your environment, you need to tell pyexcel which plugin to use per function call.
|
||||
For example, pyexcel-ods and pyexcel-odsr, and you want to get_array to use pyexcel-odsr.
|
||||
You need to append get_array(..., library='pyexcel-odsr').
|
||||
|
||||
.. rubric:: Footnotes
|
||||
|
||||
.. [#f1] zipped csv file
|
||||
.. [#f2] zipped tsv file
|
||||
{%include "io-plugins-list.rst.jj2" %}
|
||||
|
||||
After that, you can start get and save data in the loaded format. There
|
||||
are two plugins for the same file format, e.g. pyexcel-ods3 and pyexcel-ods.
|
||||
|
|
2
lint.sh
2
lint.sh
|
@ -1,2 +1,2 @@
|
|||
pip install flake8
|
||||
flake8 . --exclude=.moban.d,docs --builtins=unicode,xrange,long
|
||||
flake8 . --exclude=.moban.d,docs,setup.py --builtins=unicode,xrange,long
|
|
@ -4,7 +4,7 @@ name: pyexcel-io
|
|||
nick_name: io
|
||||
version: 0.6.0
|
||||
current_version: 0.6.0
|
||||
release: 0.5.19
|
||||
release: 0.5.20
|
||||
copyright_year: 2015-2019
|
||||
moban_command: false
|
||||
dependencies:
|
||||
|
|
|
@ -174,7 +174,12 @@ def load_data(
|
|||
reader = READERS.get_a_plugin(file_type, library)
|
||||
except NoSupportingPluginFound:
|
||||
if file_name:
|
||||
if not os.path.exists(file_name):
|
||||
if os.path.exists(file_name):
|
||||
if os.path.isfile(file_name):
|
||||
raise
|
||||
else:
|
||||
raise IOError("%s is not a file" % file_name)
|
||||
else:
|
||||
raise IOError("%s does not exist" % file_name)
|
||||
else:
|
||||
raise
|
||||
|
|
219
setup.py
219
setup.py
|
@ -1,217 +1,8 @@
|
|||
#!/usr/bin/env python3
|
||||
{% extends 'pyexcel-setup.py.jj2' %}
|
||||
|
||||
# Template by pypi-mobans
|
||||
import codecs
|
||||
import locale
|
||||
import os
|
||||
import platform
|
||||
import sys
|
||||
from shutil import rmtree
|
||||
{%block platform_block%}
|
||||
{%endblock%}
|
||||
|
||||
from setuptools import Command, find_packages, setup
|
||||
|
||||
PY2 = sys.version_info[0] == 2
|
||||
PY26 = PY2 and sys.version_info[1] < 7
|
||||
PY33 = sys.version_info < (3, 4)
|
||||
|
||||
# Work around mbcs bug in distutils.
|
||||
# http://bugs.python.org/issue10945
|
||||
# This work around is only if a project supports Python < 3.4
|
||||
|
||||
# Work around for locale not being set
|
||||
try:
|
||||
lc = locale.getlocale()
|
||||
pf = platform.system()
|
||||
if pf != "Windows" and lc == (None, None):
|
||||
locale.setlocale(locale.LC_ALL, "C.UTF-8")
|
||||
except (ValueError, UnicodeError, locale.Error):
|
||||
locale.setlocale(locale.LC_ALL, "en_US.UTF-8")
|
||||
|
||||
NAME = "pyexcel-io"
|
||||
AUTHOR = "C.W."
|
||||
VERSION = "0.6.0"
|
||||
EMAIL = "info@pyexcel.org"
|
||||
LICENSE = "New BSD"
|
||||
DESCRIPTION = (
|
||||
"A python library to read and write structured data in csv, zipped csv" +
|
||||
"format and to/from databases"
|
||||
)
|
||||
URL = "https://github.com/pyexcel/pyexcel-io"
|
||||
DOWNLOAD_URL = "%s/archive/0.5.19.tar.gz" % URL
|
||||
FILES = ["README.rst", "CHANGELOG.rst"]
|
||||
KEYWORDS = [
|
||||
"python",
|
||||
"API",
|
||||
"tsv",
|
||||
"tsvz",
|
||||
"csv",
|
||||
"csvz",
|
||||
"django",
|
||||
"sqlalchemy",
|
||||
]
|
||||
|
||||
CLASSIFIERS = [
|
||||
"Topic :: Software Development :: Libraries",
|
||||
"Programming Language :: Python",
|
||||
"Intended Audience :: Developers",
|
||||
"Programming Language :: Python :: 2.6",
|
||||
"Programming Language :: Python :: 2.7",
|
||||
"Programming Language :: Python :: 3.3",
|
||||
"Programming Language :: Python :: 3.4",
|
||||
"Programming Language :: Python :: 3.5",
|
||||
"Programming Language :: Python :: 3.6",
|
||||
|
||||
"Programming Language :: Python :: 3.7",
|
||||
|
||||
"Programming Language :: Python :: 3.8",
|
||||
|
||||
'License :: OSI Approved :: BSD License',
|
||||
{%block pyexcel_extra_classifiers%}
|
||||
'Programming Language :: Python :: Implementation :: PyPy'
|
||||
]
|
||||
|
||||
INSTALL_REQUIRES = [
|
||||
"lml>=0.0.4",
|
||||
]
|
||||
SETUP_COMMANDS = {}
|
||||
|
||||
if PY26:
|
||||
INSTALL_REQUIRES.append('ordereddict')
|
||||
|
||||
PACKAGES = find_packages(exclude=["ez_setup", "examples", "tests"])
|
||||
EXTRAS_REQUIRE = {
|
||||
"xls": ['pyexcel-xls>=0.5.0'],
|
||||
"xlsx": ['pyexcel-xlsx>=0.5.0'],
|
||||
"ods": ['pyexcel-ods3>=0.5.0'],
|
||||
}
|
||||
# You do not need to read beyond this line
|
||||
PUBLISH_COMMAND = "{0} setup.py sdist bdist_wheel upload -r pypi".format(sys.executable)
|
||||
GS_COMMAND = ("gs pyexcel-io v0.5.19 " +
|
||||
"Find 0.5.19 in changelog for more details")
|
||||
NO_GS_MESSAGE = ("Automatic github release is disabled. " +
|
||||
"Please install gease to enable it.")
|
||||
UPLOAD_FAILED_MSG = (
|
||||
'Upload failed. please run "%s" yourself.' % PUBLISH_COMMAND)
|
||||
HERE = os.path.abspath(os.path.dirname(__file__))
|
||||
|
||||
|
||||
class PublishCommand(Command):
|
||||
"""Support setup.py upload."""
|
||||
|
||||
description = "Build and publish the package on github and pypi"
|
||||
user_options = []
|
||||
|
||||
@staticmethod
|
||||
def status(s):
|
||||
"""Prints things in bold."""
|
||||
print("\033[1m{0}\033[0m".format(s))
|
||||
|
||||
def initialize_options(self):
|
||||
pass
|
||||
|
||||
def finalize_options(self):
|
||||
pass
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
self.status("Removing previous builds...")
|
||||
rmtree(os.path.join(HERE, "dist"))
|
||||
rmtree(os.path.join(HERE, "build"))
|
||||
rmtree(os.path.join(HERE, "pyexcel_io.egg-info"))
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
self.status("Building Source and Wheel (universal) distribution...")
|
||||
run_status = True
|
||||
if has_gease():
|
||||
run_status = os.system(GS_COMMAND) == 0
|
||||
else:
|
||||
self.status(NO_GS_MESSAGE)
|
||||
if run_status:
|
||||
if os.system(PUBLISH_COMMAND) != 0:
|
||||
self.status(UPLOAD_FAILED_MSG % PUBLISH_COMMAND)
|
||||
|
||||
sys.exit()
|
||||
|
||||
|
||||
SETUP_COMMANDS.update({
|
||||
"publish": PublishCommand
|
||||
})
|
||||
|
||||
|
||||
def has_gease():
|
||||
"""
|
||||
test if github release command is installed
|
||||
|
||||
visit http://github.com/moremoban/gease for more info
|
||||
"""
|
||||
try:
|
||||
import gease # noqa
|
||||
return True
|
||||
except ImportError:
|
||||
return False
|
||||
|
||||
|
||||
def read_files(*files):
|
||||
"""Read files into setup"""
|
||||
text = ""
|
||||
for single_file in files:
|
||||
content = read(single_file)
|
||||
text = text + content + "\n"
|
||||
return text
|
||||
|
||||
|
||||
def read(afile):
|
||||
"""Read a file into setup"""
|
||||
the_relative_file = os.path.join(HERE, afile)
|
||||
with codecs.open(the_relative_file, "r", "utf-8") as opened_file:
|
||||
content = filter_out_test_code(opened_file)
|
||||
content = "".join(list(content))
|
||||
return content
|
||||
|
||||
|
||||
def filter_out_test_code(file_handle):
|
||||
found_test_code = False
|
||||
for line in file_handle.readlines():
|
||||
if line.startswith(".. testcode:"):
|
||||
found_test_code = True
|
||||
continue
|
||||
if found_test_code is True:
|
||||
if line.startswith(" "):
|
||||
continue
|
||||
else:
|
||||
empty_line = line.strip()
|
||||
if len(empty_line) == 0:
|
||||
continue
|
||||
else:
|
||||
found_test_code = False
|
||||
yield line
|
||||
else:
|
||||
for keyword in ["|version|", "|today|"]:
|
||||
if keyword in line:
|
||||
break
|
||||
else:
|
||||
yield line
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
setup(
|
||||
test_suite="tests",
|
||||
name=NAME,
|
||||
author=AUTHOR,
|
||||
version=VERSION,
|
||||
author_email=EMAIL,
|
||||
description=DESCRIPTION,
|
||||
url=URL,
|
||||
download_url=DOWNLOAD_URL,
|
||||
long_description=read_files(*FILES),
|
||||
license=LICENSE,
|
||||
keywords=KEYWORDS,
|
||||
extras_require=EXTRAS_REQUIRE,
|
||||
tests_require=["nose"],
|
||||
install_requires=INSTALL_REQUIRES,
|
||||
packages=PACKAGES,
|
||||
include_package_data=True,
|
||||
zip_safe=False,
|
||||
classifiers=CLASSIFIERS,
|
||||
cmdclass=SETUP_COMMANDS
|
||||
)
|
||||
{%endblock%}}
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
nose
|
||||
mock;python_version<"3"
|
||||
codecov
|
||||
coverage
|
||||
flake8
|
||||
{% extends 'tests/requirements.txt.jj2' %}
|
||||
{%block extras %}
|
||||
SQLAlchemy
|
||||
pyexcel>=0.2.0
|
||||
pyexcel-xls>=0.1.0
|
||||
moban
|
||||
black;python_version>="3.6"
|
||||
isort;python_version>="3.6"
|
||||
{%endblock%}
|
||||
|
|
|
@ -15,6 +15,11 @@ from nose.tools import eq_, raises
|
|||
PY2 = sys.version_info[0] == 2
|
||||
|
||||
|
||||
@raises(IOError)
|
||||
def test_directory_name_as_file():
|
||||
get_data('/')
|
||||
|
||||
|
||||
def test_force_file_type():
|
||||
test_file = "force_file_type.txt"
|
||||
data = get_data(
|
||||
|
|
Loading…
Reference in New Issue