From b0dd6081907d2d141690a0d7281b441c2386056a Mon Sep 17 00:00:00 2001 From: chfw Date: Tue, 21 Aug 2018 18:26:50 +0100 Subject: [PATCH 1/5] :sparkles: enhance the behaivor of pyexcel-xls, return #N/A for cell error. https://github.com/pyexcel/pyexcel/issues/151 --- .gitignore | 395 +++++++++++++++++++++++++- .moban.yml | 2 +- .travis.yml | 3 +- README.rst | 19 +- docs/source/conf.py | 186 ++++++++++-- pyexcel_xls.yaml => pyexcel-xls.yml | 6 +- pyexcel_xls/xlsr.py | 3 + setup.py | 71 +++-- test.bat | 2 +- test.sh | 2 +- tests/fixtures/pyexcel_issue_151.xlsx | Bin 0 -> 4465 bytes tests/test_bug_fixes.py | 8 + tests/test_formatters.py | 32 ++- tests/test_stringio.py | 6 +- 14 files changed, 656 insertions(+), 79 deletions(-) rename pyexcel_xls.yaml => pyexcel-xls.yml (81%) create mode 100644 tests/fixtures/pyexcel_issue_151.xlsx diff --git a/.gitignore b/.gitignore index f32c742..d09b336 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ -# April 2016 -# reference: https://github.com/github/gitignore/blob/master/Python.gitignore +# moban hashes +.moban.hashes + +# Extra rules from https://github.com/github/gitignore/ +# Python rules # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] @@ -10,7 +13,6 @@ __pycache__/ # Distribution / packaging .Python -env/ build/ develop-eggs/ dist/ @@ -22,9 +24,11 @@ lib64/ parts/ sdist/ var/ +wheels/ *.egg-info/ .installed.cfg *.egg +MANIFEST # PyInstaller # Usually these files are written by a python script from a template @@ -44,8 +48,9 @@ htmlcov/ .cache nosetests.xml coverage.xml -*,cover +*.cover .hypothesis/ +.pytest_cache/ # Translations *.mo @@ -54,6 +59,7 @@ coverage.xml # Django stuff: *.log local_settings.py +db.sqlite3 # Flask stuff: instance/ @@ -68,7 +74,7 @@ docs/_build/ # PyBuilder target/ -# IPython Notebook +# Jupyter Notebook .ipynb_checkpoints # pyenv @@ -77,23 +83,388 @@ target/ # celery beat schedule file celerybeat-schedule -# dotenv -.env +# SageMath parsed files +*.sage.py -# virtualenv +# Environments +.env +.venv +env/ venv/ ENV/ +env.bak/ +venv.bak/ # Spyder project settings .spyderproject +.spyproject # Rope project settings .ropeproject -# emacs +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +# VirtualEnv rules +# Virtualenv +# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ +.Python +[Bb]in +[Ii]nclude +[Ll]ib +[Ll]ib64 +[Ll]ocal +[Ss]cripts +pyvenv.cfg +.venv +pip-selfcheck.json + +# Linux rules *~ -# moban hashes -.moban.hashes -.DS_store +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# Windows rules +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# macOS rules +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Emacs rules +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el + +# Vim rules +# Swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + +# JetBrains rules +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# SublimeText rules +# Cache files for Sublime Text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache + +# Workspace files are user-specific +*.sublime-workspace + +# Project files should be checked into the repository, unless a significant +# proportion of contributors will probably not be using Sublime Text +# *.sublime-project + +# SFTP configuration file +sftp-config.json + +# Package control specific files +Package Control.last-run +Package Control.ca-list +Package Control.ca-bundle +Package Control.system-ca-bundle +Package Control.cache/ +Package Control.ca-certs/ +Package Control.merged-ca-bundle +Package Control.user-ca-bundle +oscrypto-ca-bundle.crt +bh_unicode_properties.cache + +# Sublime-github package stores a github token in this file +# https://packagecontrol.io/packages/sublime-github +GitHub.sublime-settings + +# KDevelop4 rules +*.kdev4 +.kdev4/ + +# Kate rules +# Swap Files # +.*.kate-swp +.swp.* + +# TextMate rules +*.tmproj +*.tmproject +tmtags + +# VisualStudioCode rules +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# Xcode rules +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +build/ +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +# Eclipse rules + +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# TortoiseGit rules +# Project-level settings +/.tgitconfig + +# Tags rules +# Ignore tags created by etags, ctags, gtags (GNU global) and cscope +TAGS +.TAGS +!TAGS/ +tags +.tags +!tags/ +gtags.files +GTAGS +GRTAGS +GPATH +GSYMS +cscope.files +cscope.out +cscope.in.out +cscope.po.out diff --git a/.moban.yml b/.moban.yml index e837507..3e6b8f6 100644 --- a/.moban.yml +++ b/.moban.yml @@ -4,7 +4,7 @@ configuration: - "commons/templates" - "setupmobans/templates" - ".moban.d" - configuration: pyexcel_xls.yaml + configuration: pyexcel-xls.yml targets: - README.rst: README.rst - setup.py: setup.py diff --git a/.travis.yml b/.travis.yml index 7a38bf0..5817466 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,12 +4,11 @@ notifications: email: false python: - pypy-5.3.1 + - 3.7-dev - 3.6 - 3.5 - 3.4 - - 3.3 - 2.7 - - 2.6 matrix: include: - python: 2.7 diff --git a/README.rst b/README.rst index debaced..5aae913 100644 --- a/README.rst +++ b/README.rst @@ -5,7 +5,10 @@ pyexcel-xls - Let you focus on data, instead of xls format .. image:: https://raw.githubusercontent.com/pyexcel/pyexcel.github.io/master/images/patreon.png :target: https://www.patreon.com/pyexcel -.. image:: https://api.travis-ci.org/pyexcel/pyexcel-xls.svg?branch=master +.. 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-xls.svg?branch=master :target: http://travis-ci.org/pyexcel/pyexcel-xls .. image:: https://codecov.io/gh/pyexcel/pyexcel-xls/branch/master/graph/badge.svg @@ -25,7 +28,8 @@ Fonts, colors and charts are not supported. Installation ================================================================================ -You can install it via pip: + +You can install pyexcel-xls via pip: .. code-block:: bash @@ -44,13 +48,16 @@ Support the project ================================================================================ If your company has embedded pyexcel and its components into a revenue generating -product, please `support me on patreon `_ to -maintain the project and develop it further. +product, please support me on `patreon `_ +or `bounty source `_ to maintain +the project and develop it further. -If you are an individual, you are welcome to support me too on patreon and for however long -you feel like to. As a patreon, you will receive +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 `_. +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. diff --git a/docs/source/conf.py b/docs/source/conf.py index 9f48f38..5c8f650 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -4,6 +4,45 @@ DESCRIPTION = ( ' reads xlsx and xlsm format' + '' ) +# -*- coding: utf-8 -*- +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/master/config + +# -- Path setup -------------------------------------------------------------- + +# 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. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +# -- Project information ----------------------------------------------------- + +project = u'pyexcel-xls' +copyright = u'2015-2018 Onni Software Ltd.' +author = u'C.W.' + +# The short X.Y version +version = u'0.5.6' +# The full version, including alpha/beta/rc tags +release = u'0.5.7' + + +# -- 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.doctest', @@ -11,34 +50,146 @@ extensions = [ 'sphinx.ext.viewcode', ] -intersphinx_mapping = { - 'pyexcel': ('http://pyexcel.readthedocs.io/en/latest/', None), -} -spelling_word_list_filename = 'spelling_wordlist.txt' +# Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] source_suffix = '.rst' + +# The master toctree document. master_doc = 'index' -project = u'pyexcel-xls' -copyright = u'2015-2017 Onni Software Ltd.' -version = '0.5.1' -release = '0.6.0' +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = 'en' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' -html_theme = 'default' + + +# -- 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 = {} + +# 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'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. htmlhelp_basename = 'pyexcel-xlsdoc' -latex_elements = {} + + +# -- 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': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). latex_documents = [ - ('index', 'pyexcel-xls.tex', - 'pyexcel-xls Documentation', - 'Onni Software Ltd.', 'manual'), + (master_doc, 'pyexcel-xls.tex', u'pyexcel-xls Documentation', + u'Onni Software Ltd.', 'manual'), ] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). man_pages = [ - ('index', 'pyexcel-xls', - 'pyexcel-xls Documentation', - [u'Onni Software Ltd.'], 1) + (master_doc, 'pyexcel-xls', u'pyexcel-xls Documentation', + [author], 1) ] + + +# -- 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, 'pyexcel-xls', u'pyexcel-xls Documentation', + author, 'pyexcel-xls', 'One line description of project.', + 'Miscellaneous'), +] + + +# -- Options for Epub output ------------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = project + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +# +# epub_identifier = '' + +# A unique identification for the text. +# +# epub_uid = '' + +# A list of files that should not be packed into the epub file. +epub_exclude_files = ['search.html'] + +# -- Extension configuration ------------------------------------------------- +# -- Options for intersphinx extension --------------------------------------- + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'https://docs.python.org/': None} +# TODO: html_theme not configurable upstream +html_theme = 'default' + +# TODO: DESCRIPTION not configurable upstream texinfo_documents = [ ('index', 'pyexcel-xls', 'pyexcel-xls Documentation', @@ -46,3 +197,6 @@ texinfo_documents = [ DESCRIPTION, 'Miscellaneous'), ] +intersphinx_mapping.update({ + 'pyexcel': ('http://pyexcel.readthedocs.io/en/latest/', None), +}) diff --git a/pyexcel_xls.yaml b/pyexcel-xls.yml similarity index 81% rename from pyexcel_xls.yaml rename to pyexcel-xls.yml index 1f33888..5aa768a 100644 --- a/pyexcel_xls.yaml +++ b/pyexcel-xls.yml @@ -1,9 +1,9 @@ overrides: "pyexcel.yaml" name: "pyexcel-xls" nick_name: xls -version: 0.6.0 -current_version: 0.6.0 -release: 0.5.1 +version: 0.5.7 +current_version: 0.5.7 +release: 0.5.6 file_type: xls dependencies: - pyexcel-io>=0.5.0 diff --git a/pyexcel_xls/xlsr.py b/pyexcel_xls/xlsr.py index 34988f9..7d6356d 100644 --- a/pyexcel_xls/xlsr.py +++ b/pyexcel_xls/xlsr.py @@ -21,6 +21,7 @@ XLS_KEYWORDS = [ 'file_contents', 'encoding_override', 'formatting_info', 'on_demand', 'ragged_rows' ] +DEFAULT_ERROR_VALUE = '#N/A' class XLSheet(SheetReader): @@ -70,6 +71,8 @@ class XLSheet(SheetReader): elif cell_type == xlrd.XL_CELL_NUMBER and self.__auto_detect_int: if has_no_digits_in_float(value): value = int(value) + elif cell_type == xlrd.XL_CELL_ERROR: + value = DEFAULT_ERROR_VALUE return value def _offset_hidden_indices(self, row, column): diff --git a/setup.py b/setup.py index b7b9732..c518fa1 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,6 @@ -# Template by setupmobans +#!/usr/bin/env python3 + +# Template by pypi-mobans import os import sys import codecs @@ -9,27 +11,24 @@ PY26 = PY2 and sys.version_info[1] < 7 NAME = 'pyexcel-xls' AUTHOR = 'C.W.' -VERSION = '0.6.0' +VERSION = '0.5.7' EMAIL = 'wangc_2011@hotmail.com' LICENSE = 'New BSD' DESCRIPTION = ( 'A wrapper library to read, manipulate and write data in xls format. It' + - ' reads xlsx and xlsm format' + - '' + 'reads xlsx and xlsm format' ) URL = 'https://github.com/pyexcel/pyexcel-xls' -DOWNLOAD_URL = '%s/archive/0.5.1.tar.gz' % URL -FILES = ['README.rst', 'CHANGELOG.rst'] +DOWNLOAD_URL = '%s/archive/0.5.6.tar.gz' % URL +FILES = ['README.rst', 'CHANGELOG.rst'] KEYWORDS = [ 'xls', 'xlsx', - 'xlsm' - 'python' + 'xlsm', + 'python', ] CLASSIFIERS = [ - 'Topic :: Office/Business', - 'Topic :: Utilities', 'Topic :: Software Development :: Libraries', 'Programming Language :: Python', 'Intended Audience :: Developers', @@ -47,16 +46,22 @@ INSTALL_REQUIRES = [ 'xlrd', 'xlwt', ] +SETUP_COMMANDS = {} PACKAGES = find_packages(exclude=['ez_setup', 'examples', 'tests']) EXTRAS_REQUIRE = { } +# 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-xls v0.5.1 ' + - "Find 0.5.1 in changelog for more details") -here = os.path.abspath(os.path.dirname(__file__)) +GS_COMMAND = ('gs pyexcel-xls v0.5.6 ' + + "Find 0.5.6 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): @@ -79,17 +84,43 @@ class PublishCommand(Command): def run(self): try: self.status('Removing previous builds...') - rmtree(os.path.join(here, 'dist')) + rmtree(os.path.join(HERE, 'dist')) + rmtree(os.path.join(HERE, 'build')) + rmtree(os.path.join(HERE, 'pyexcel_xls.egg-info')) except OSError: pass self.status('Building Source and Wheel (universal) distribution...') - if os.system(GS_COMMAND) == 0: - os.system(PUBLISH_COMMAND) + 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 = "" @@ -101,7 +132,8 @@ def read_files(*files): def read(afile): """Read a file into setup""" - with codecs.open(afile, 'r', 'utf-8') as opened_file: + 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 @@ -150,8 +182,5 @@ if __name__ == '__main__': include_package_data=True, zip_safe=False, classifiers=CLASSIFIERS, - setup_requires=['gease'], - cmdclass={ - 'publish': PublishCommand, - } + cmdclass=SETUP_COMMANDS ) diff --git a/test.bat b/test.bat index a09129d..351d266 100644 --- a/test.bat +++ b/test.bat @@ -1,2 +1,2 @@ pip freeze -nosetests --with-coverage --cover-package pyexcel_xls --cover-package tests --with-doctest --doctest-extension=.rst README.rst tests docs/source pyexcel_xls && flake8 . --exclude=.moban.d --builtins=unicode,xrange,long +nosetests --with-coverage --cover-package pyexcel_xls --cover-package tests tests --with-doctest --doctest-extension=.rst README.rst docs/source pyexcel_xls && flake8 . --exclude=.moban.d,docs --builtins=unicode,xrange,long diff --git a/test.sh b/test.sh index a09129d..351d266 100644 --- a/test.sh +++ b/test.sh @@ -1,2 +1,2 @@ pip freeze -nosetests --with-coverage --cover-package pyexcel_xls --cover-package tests --with-doctest --doctest-extension=.rst README.rst tests docs/source pyexcel_xls && flake8 . --exclude=.moban.d --builtins=unicode,xrange,long +nosetests --with-coverage --cover-package pyexcel_xls --cover-package tests tests --with-doctest --doctest-extension=.rst README.rst docs/source pyexcel_xls && flake8 . --exclude=.moban.d,docs --builtins=unicode,xrange,long diff --git a/tests/fixtures/pyexcel_issue_151.xlsx b/tests/fixtures/pyexcel_issue_151.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..fd2b54a454e6c0a34795802fd5098e2865d647a4 GIT binary patch literal 4465 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 Date: Tue, 21 Aug 2018 18:28:28 +0100 Subject: [PATCH 2/5] :lipstick: pump version number --- docs/source/conf.py | 4 ++-- pyexcel-xls.yml | 6 +++--- setup.py | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 5c8f650..5e08605 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -29,9 +29,9 @@ copyright = u'2015-2018 Onni Software Ltd.' author = u'C.W.' # The short X.Y version -version = u'0.5.6' +version = u'0.5.7' # The full version, including alpha/beta/rc tags -release = u'0.5.7' +release = u'0.5.8' # -- General configuration --------------------------------------------------- diff --git a/pyexcel-xls.yml b/pyexcel-xls.yml index 5aa768a..a77e423 100644 --- a/pyexcel-xls.yml +++ b/pyexcel-xls.yml @@ -1,9 +1,9 @@ overrides: "pyexcel.yaml" name: "pyexcel-xls" nick_name: xls -version: 0.5.7 -current_version: 0.5.7 -release: 0.5.6 +version: 0.5.8 +current_version: 0.5.8 +release: 0.5.7 file_type: xls dependencies: - pyexcel-io>=0.5.0 diff --git a/setup.py b/setup.py index c518fa1..6615ef2 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ PY26 = PY2 and sys.version_info[1] < 7 NAME = 'pyexcel-xls' AUTHOR = 'C.W.' -VERSION = '0.5.7' +VERSION = '0.5.8' EMAIL = 'wangc_2011@hotmail.com' LICENSE = 'New BSD' DESCRIPTION = ( @@ -19,7 +19,7 @@ DESCRIPTION = ( 'reads xlsx and xlsm format' ) URL = 'https://github.com/pyexcel/pyexcel-xls' -DOWNLOAD_URL = '%s/archive/0.5.6.tar.gz' % URL +DOWNLOAD_URL = '%s/archive/0.5.7.tar.gz' % URL FILES = ['README.rst', 'CHANGELOG.rst'] KEYWORDS = [ 'xls', @@ -55,8 +55,8 @@ EXTRAS_REQUIRE = { # 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-xls v0.5.6 ' + - "Find 0.5.6 in changelog for more details") +GS_COMMAND = ('gs pyexcel-xls v0.5.7 ' + + "Find 0.5.7 in changelog for more details") NO_GS_MESSAGE = ('Automatic github release is disabled. ' + 'Please install gease to enable it.') UPLOAD_FAILED_MSG = ( From 629c2c8e765aca5180bae2448d4566ac38eb155c Mon Sep 17 00:00:00 2001 From: chfw Date: Wed, 22 Aug 2018 07:51:12 +0100 Subject: [PATCH 3/5] :green_heart: use xlrd 1.1.0 --- .moban.d/tests/requirements.txt | 1 + tests/requirements.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/.moban.d/tests/requirements.txt b/.moban.d/tests/requirements.txt index da5ea12..414637d 100644 --- a/.moban.d/tests/requirements.txt +++ b/.moban.d/tests/requirements.txt @@ -1,4 +1,5 @@ {% extends 'tests/requirements.txt.jj2' %} {%block extras %} pyexcel +xlrd==1.1.0 {%endblock%} diff --git a/tests/requirements.txt b/tests/requirements.txt index a29762c..131361c 100644 --- a/tests/requirements.txt +++ b/tests/requirements.txt @@ -4,3 +4,4 @@ codecov coverage flake8 pyexcel +xlrd==1.1.0 From 7aec2d0407492dff4cf18bd52dd4d5b759800474 Mon Sep 17 00:00:00 2001 From: chfw Date: Wed, 22 Aug 2018 18:45:07 +0100 Subject: [PATCH 4/5] :sparkles: use yml for changelog --- .moban.yml | 3 ++ CHANGELOG.rst | 47 ++++++++++++------------ changelog.yml | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 124 insertions(+), 25 deletions(-) create mode 100644 changelog.yml diff --git a/.moban.yml b/.moban.yml index 3e6b8f6..1089516 100644 --- a/.moban.yml +++ b/.moban.yml @@ -21,3 +21,6 @@ targets: - "tests/test_stringio.py": "tests/test_stringio.py.jj2" - "tests/test_writer.py": "tests/test_writer.py.jj2" - "tests/base.py": "tests/base.py" + - output: CHANGELOG.rst + configuration: changelog.yml + template: CHANGELOG.rst.jj2 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ffa0760..b5e65e0 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,7 +5,7 @@ Change log -------------------------------------------------------------------------------- Added -******************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #. `#21 `_, skip hidden rows and columns under 'skip_hidden_row_and_column' flag. @@ -14,7 +14,7 @@ Added -------------------------------------------------------------------------------- Updated -******************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #. `#20 `_, is handled in pyexcel-io @@ -25,7 +25,7 @@ Updated -------------------------------------------------------------------------------- Updated -******************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #. `#20 `_, handle unseekable stream given by http response. @@ -34,17 +34,18 @@ Updated -------------------------------------------------------------------------------- Updated -******************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -#. `#15 `_, close file handle -#. pyexcel-io plugin interface now updated to use - `lml `_. +#. `pyexcel-xlsx#15 `_, close + file handle +#. pyexcel-io plugin interface now updated to use `lml + `_. 0.3.3 - 30/05/2017 -------------------------------------------------------------------------------- Updated -******************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #. `#18 `_, pass on encoding_override and others to xlrd. @@ -53,17 +54,16 @@ Updated -------------------------------------------------------------------------------- Updated -******************************************************************************** - -#. `#16 `_, allow mmap to - be passed as file content +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +#. `#16 `_, allow mmap to be + passed as file content 0.3.1 - 16.01.2017 -------------------------------------------------------------------------------- Updated -******************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #. `#14 `_, Python 3.6 - cannot use LOCALE flag with a str pattern @@ -73,7 +73,7 @@ Updated -------------------------------------------------------------------------------- Updated -******************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #. `#13 `_, alert on empyty file content @@ -83,7 +83,7 @@ Updated -------------------------------------------------------------------------------- Updated -******************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #. `#10 `_, To support generator as member of the incoming two dimensional data @@ -92,7 +92,7 @@ Updated -------------------------------------------------------------------------------- Added -******************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #. support pagination. two pairs: start_row, row_limit and start_column, column_limit help you deal with large files. @@ -101,28 +101,26 @@ Added -------------------------------------------------------------------------------- Added -******************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #. `#9 `_, `skip_hidden_sheets` is added. By default, hidden sheets are skipped when reading all sheets. Reading sheet by name or by index are not affected. - 0.2.0 - 01.06.2016 -------------------------------------------------------------------------------- Added -******************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #. By default, `float` will be converted to `int` where fits. `auto_detect_int`, a flag to switch off the autoatic conversion from `float` to `int`. #. 'library=pyexcel-xls' was added so as to inform pyexcel to use it instead of - other libraries, in the situation where there are more than one plugin for - a file type, e.g. xlsm - + other libraries, in the situation where there are more than one plugin for a + file type, e.g. xlsm Updated -******************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #. support the auto-import feature of pyexcel-io 0.2.0 #. xlwt is now used for python 2 implementation while xlwt-future is used for @@ -132,9 +130,8 @@ Updated -------------------------------------------------------------------------------- Added -******************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #. Passing "streaming=True" to get_data, you will get the two dimensional array as a generator #. Passing "data=your_generator" to save_data is acceptable too. - diff --git a/changelog.yml b/changelog.yml new file mode 100644 index 0000000..815accb --- /dev/null +++ b/changelog.yml @@ -0,0 +1,99 @@ +name: pyexcel-xls +organisation: pyexcel +releases: +- changes: + - action: Added + details: + - '`#21`, skip hidden rows and columns under ''skip_hidden_row_and_column'' flag.' + date: unreleased + version: 0.6.0 +- changes: + - action: Updated + details: + - '`#20`, is handled in pyexcel-io' + - put dependency on pyexcel-io 0.5.0, which uses cStringIO instead of StringIO. Hence, + there will be performance boost in handling files in memory. + date: 30.08.2017 + version: 0.5.0 +- changes: + - action: Updated + details: + - '`#20`, handle unseekable stream given by http response.' + date: 25.08.2017 + version: 0.4.1 +- changes: + - action: Updated + details: + - '`pyexcel-xlsx#15`, close file handle' + - pyexcel-io plugin interface now updated to use `lml `_. + date: 19.06.2017 + version: 0.4.0 +- changes: + - action: Updated + details: + - '`#18`, pass on encoding_override and others to xlrd.' + date: 30/05/2017 + version: 0.3.3 +- changes: + - action: Updated + details: + - '`#16`, allow mmap to be passed as file content' + date: 18.05.2017 + version: 0.3.2 +- changes: + - action: Updated + details: + - '`#14`, Python 3.6 - cannot use LOCALE flag with a str pattern' + - fix its dependency on pyexcel-io 0.3.0 + date: 16.01.2017 + version: 0.3.1 +- changes: + - action: Updated + details: + - '`#13`, alert on empyty file content' + - Support pyexcel-io v0.3.0 + date: 22.12.2016 + version: 0.3.0 +- changes: + - action: Updated + details: + - '`#10`, To support generator as member of the incoming two dimensional data' + date: 20.09.2016 + version: 0.2.3 +- changes: + - action: Added + details: + - 'support pagination. two pairs: start_row, row_limit and start_column, column_limit + help you deal with large files.' + date: 31.08.2016 + version: 0.2.2 +- changes: + - action: Added + details: + - '`#9`, `skip_hidden_sheets` is added. By default, hidden sheets are skipped + when reading all sheets. Reading sheet by name or by index are not affected.' + date: 13.07.2016 + version: 0.2.1 +- changes: + - action: Added + details: + - By default, `float` will be converted to `int` where fits. `auto_detect_int`, a + flag to switch off the autoatic conversion from `float` to `int`. + - '''library=pyexcel-xls'' was added so as to inform pyexcel to use it instead + of other libraries, in the situation where there are more than one plugin for a + file type, e.g. xlsm' + - action: Updated + details: + - support the auto-import feature of pyexcel-io 0.2.0 + - xlwt is now used for python 2 implementation while xlwt-future is used for python + 3 + date: 01.06.2016 + version: 0.2.0 +- changes: + - action: Added + details: + - Passing "streaming=True" to get_data, you will get the two dimensional array as + a generator + - Passing "data=your_generator" to save_data is acceptable too. + date: 17.01.2016 + version: 0.1.0 From 8443709d84364386b0f0867f8fd40d77c207e5aa Mon Sep 17 00:00:00 2001 From: chfw Date: Wed, 22 Aug 2018 18:54:41 +0100 Subject: [PATCH 5/5] :egg: :ferris_wheel: release 0.5.8 --- CHANGELOG.rst | 9 +++++++++ changelog.yml | 6 ++++++ docs/source/conf.py | 2 +- pyexcel-xls.yml | 2 +- setup.py | 6 +++--- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 70bb9c2..e4677db 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,15 @@ Change log ================================================================================ +0.5.8 - 22.08.2018 +-------------------------------------------------------------------------------- + +Added +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +#. `pyexcel#151 `_, read cell + error as #N/A. + 0.5.7 - 15.03.2018 -------------------------------------------------------------------------------- diff --git a/changelog.yml b/changelog.yml index 3734e3c..f25f270 100644 --- a/changelog.yml +++ b/changelog.yml @@ -1,6 +1,12 @@ name: pyexcel-xls organisation: pyexcel releases: +- changes: + - action: Added + details: + - "`pyexcel#151`, read cell error as #N/A." + date: 22.08.2018 + version: 0.5.8 - changes: - action: Added details: diff --git a/docs/source/conf.py b/docs/source/conf.py index 5e08605..f3b62db 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -29,7 +29,7 @@ copyright = u'2015-2018 Onni Software Ltd.' author = u'C.W.' # The short X.Y version -version = u'0.5.7' +version = u'0.5.8' # The full version, including alpha/beta/rc tags release = u'0.5.8' diff --git a/pyexcel-xls.yml b/pyexcel-xls.yml index 8ddf1b8..c620ccb 100644 --- a/pyexcel-xls.yml +++ b/pyexcel-xls.yml @@ -3,7 +3,7 @@ name: "pyexcel-xls" nick_name: xls version: 0.5.8 current_version: 0.5.8 -release: 0.5.7 +release: 0.5.8 file_type: xls dependencies: - pyexcel-io>=0.5.3 diff --git a/setup.py b/setup.py index 0a02bd1..92b2a0e 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,7 @@ DESCRIPTION = ( 'reads xlsx and xlsm format' ) URL = 'https://github.com/pyexcel/pyexcel-xls' -DOWNLOAD_URL = '%s/archive/0.5.7.tar.gz' % URL +DOWNLOAD_URL = '%s/archive/0.5.8.tar.gz' % URL FILES = ['README.rst', 'CHANGELOG.rst'] KEYWORDS = [ 'xls', @@ -55,8 +55,8 @@ EXTRAS_REQUIRE = { # 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-xls v0.5.7 ' + - "Find 0.5.7 in changelog for more details") +GS_COMMAND = ('gs pyexcel-xls v0.5.8 ' + + "Find 0.5.8 in changelog for more details") NO_GS_MESSAGE = ('Automatic github release is disabled. ' + 'Please install gease to enable it.') UPLOAD_FAILED_MSG = (