Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Shawn Brown <03sjbrown@gmail.com> Newsgroups: comp.lang.python.announce Subject: [ANN] get-reader 1.0.0 stable release Date: Sat, 28 Dec 2019 20:57:12 -0500 Lines: 84 Approved: python-announce-list@python.org Message-ID: <157758799587.8676.python-announce-list@python.org> Reply-To: python-list@python.org Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" X-Trace: news.uni-berlin.de rZJMbEEWbBnaIjnFe7ZZxA1sKTLRETnXqpMOqRK7qQ6A== X-Spam-Status: OK 0.000 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'url:github': 0.03; '>>>': 0.03; 'objects': 0.05; 'pip': 0.05; 'url-ip:151.101.0.223/32': 0.05; 'url-ip:151.101.128.223/32': 0.05; 'url- ip:151.101.192.223/32': 0.05; 'url-ip:151.101.64.223/32': 0.05; 'tests': 0.07; 'url:project': 0.07; 'url:pypi': 0.07; '>>>': 0.09; 'connection.': 0.09; 'optional': 0.09; 'pandas': 0.09; 'skip:` 10': 0.09; 'subject:ANN': 0.09; 'url- ip:192.30/16': 0.09; 'install': 0.10; 'python': 0.12; 'context': 0.14; '2020,': 0.16; 'apache': 0.16; 'closed.': 0.16; 'deleted,': 0.16; 'dependencies': 0.16; 'dependency': 0.16; 'freely': 0.16; 'iterator': 0.16; 'package:': 0.16; 'projects:': 0.16; 'stable': 0.16; 'statement:': 0.16; 'subject:release': 0.16; 'versions.': 0.16; 'to:addr:python-announce-list': 0.19; 'subject:] ': 0.21; 'file.': 0.21; 'url-ip:151.101.0/24': 0.22; 'url- ip:151.101.128/24': 0.22; 'url-ip:151.101.192/24': 0.22; 'url- ip:151.101.64/24': 0.22; 'runs': 0.23; 'versions': 0.26; 'explicitly': 0.27; 'row': 0.27; 'example': 0.27; 'import': 0.27; 'message-id:@mail.gmail.com': 0.29; 'url-ip:151.101/16': 0.29; 'url-ip:151/8': 0.29; 'returns': 0.29; "doesn't": 0.29; '...': 0.30; 'using': 0.30; 'module': 0.30; 'received:google.com': 0.31; 'code': 0.31; 'files': 0.31; 'from:addr:gmail.com': 0.32; 'version': 0.33; 'interface': 0.33; 'those': 0.34; 'continue': 0.35; 'ecosystem': 0.35; 'finish': 0.35; 'reads': 0.35; 'tested': 0.35; 'use': 0.35; 'subject:[': 0.35; 'include': 0.37; 'handling': 0.37; 'older': 0.37; 'run': 0.39; 'single': 0.39; 'skip:u 10': 0.40; 'returned': 0.60; 'through': 0.61; 'skip:g 20': 0.61; 'directly': 0.61; 'reading': 0.62; 'long': 0.62; 'your': 0.63; 'sql': 0.64; 'under': 0.65; 'reader': 0.65; 'subject:get': 0.65; 'january': 0.66; 'automated': 0.68; 'existing': 0.71; 'ability': 0.76; 'easy': 0.80; 'etc.),': 0.84; 'manager:': 0.84; 'seamless': 0.84; 'database': 0.86; 'incorporate': 0.91 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=7vn7h++db1BpbDcIV4KxdKWM8hq9wOK6Wrl4ELte/Yo=; b=gy5jAYrnnlAfb290QS+eOFpSsHwpLFvlCKAjsk/277BiavXNyqzNtHoeRudV4+feKU blmBrBYeE70AUQRG3TeB6wrD/ftaP4O2xlsii6Ie5fvPwODNKOpkqfgWduOS8fKqesrj /mb7sQrLA0EBqnzl46o7Px/RKn1spCdUmSFTZulOBRY9D6VZkblOD/oaBMsVTPjBO5l3 RNuqFoSlBGnirk96DSf0Wo24EDuq/oI51yNdajiPx/dQPahrRUvaSgI5xac2WCbmj8Lp CUT6enPJ7fjjq3rY8Gn05AKBOGbWWDScrzAapmoz4is9hrDmDdoSMqFazAeU1R6TKmAW 5Pjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=7vn7h++db1BpbDcIV4KxdKWM8hq9wOK6Wrl4ELte/Yo=; b=CJ6kEt1zOGoaSrYS0shLImUBp/08nRpRCMdmHaOXKcMyBViczsTpDAl+o7yWCuDbsd 9hcORtRmuMMh518Bo1l9Oi7FbHTt2TyR7CsPRvDh5pCSgCEGPjHuWJNSOl8PRUHJR1e3 dnc62Wn2yUBeu2HBs68PQbuo4uOrqhZehWVg8L3qLRDyEC5BrOEkvYocm7NOL7TyjN8h k187dJnHylAhUTxNBfTu1jBx3JTMAnT6NVAs8lfdiaFDdHwOx0oFPxyc/bjtxf6ZXszs 2bXHBSQzd5Wuyiy4pROBJRtWLec4oY9oyUEaTWE6evOZBJ+Eg//JHhb5JEcgpKlD+ZE+ j77g== X-Gm-Message-State: APjAAAX2uhUwYsTFg1wAk7VgSQQbVS2JoEA/0NM4fgvpizp2eq4lCBBa Xa8mVMMwSOIP+oeRPtHkZZ9hR7dqMGttLk+FCNWUbRQN X-Google-Smtp-Source: APXvYqwe0F6o7ZzjGuwkmYiroQgmq/lO1PZEaij5LWg+QLlD1RjzvM8ZzHNe7EL5n5SrePagH3TdqsMQpBL9u3/tl3o= X-Received: by 2002:a17:907:212f:: with SMTP id qo15mr37624021ejb.245.1577584843513; Sat, 28 Dec 2019 18:00:43 -0800 (PST) X-MailFrom: 03sjbrown@gmail.com X-Mailman-Rule-Hits: emergency X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved Message-ID-Hash: IRU7PKB6XEUXLLP3PG2A4PUFAWR6YHKD X-Message-ID-Hash: IRU7PKB6XEUXLLP3PG2A4PUFAWR6YHKD X-Mailman-Approved-At: Sat, 28 Dec 2019 21:53:09 -0500 X-Content-Filtered-By: Mailman/MimeDel 3.3.1 X-Mailman-Version: 3.3.1 Precedence: list List-Id: Announcement-only list for the Python programming language Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Xref: csiph.com comp.lang.python.announce:3283 Happy Holidays! The first stable release of get-reader, version 1.0.0 is now available. * https://pypi.org/project/get-reader/ * https://github.com/shawnbrown/get_reader This module provides a `get_reader()` function that returns reader objects similar to those returned by `csv.reader()`. This package: * reduces common boilerplate code for handling files and reading records * reads data from CSV, pandas, SQL connections, MS Excel, DBF, and squint * provides a single interface across Python versions (including seamless Unicode-aware CSV support for Python 2) * is easy to incorporate into your own projects: * has no hard dependencies * runs on Python 2.6, 2.7, 3.2 through 3.8, PyPy, PyPy3, and Jython * is freely available under the Apache License, version 2 * can be easily vendored directly into your codebase if you don't want to include it as a dependency Some examples: >>> from get_reader import get_reader >>> >>> # CSV file. >>> reader = get_reader('myfile.csv') >>> >>> # Database connection. >>> connection = ... >>> reader = get_reader(connection, 'SELECT col1, col2 FROM mytable;') >>> >>> # Pandas DataFrame. >>> df = pd.DataFrame([...]) >>> reader = get_reader(df) >>> >>> # Excel file. >>> reader = get_reader('myfile.xlsx', worksheet='Sheet2') The internal file object is automatically closed when the iterator is exhausted, when the object is deleted, or when it is explicitly closed. An example using a context manager: >>> with get_reader('myfile.csv') as reader: >>> for row in reader: >>> print(', '.join(row)) The internal file object is also closed when exiting a with block even if the for-loop doesn't finish exhausting the reader. Install: The get-reader module has no hard dependencies; is tested on Python 2.6, 2.7, 3.2 through 3.8, PyPy, PyPy3, and Jython; and is freely available under the Apache License, version 2. You can install get_reader using pip: pip install get-reader To install optional support for MS Excel and DBF files (dBase, Foxpro, etc.), use the following: pip install get-reader[excel,dbf] Python 2 Support Statement: While official support for Python 2 ends on January 1, 2020, this project will continue to support older versions as long as the existing ecosystem provides the ability to run automated tests on those older versions.