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: Datatest 0.9.6 Released Date: Mon, 3 Jun 2019 00:40:37 -0400 Lines: 53 Approved: python-announce-list@python.org Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" X-Trace: news.uni-berlin.de 68Mr3xVFoC9i8pfY/3G/hw+VwX4H42G3z16dhwmeKQYQ== Return-Path: <03sjbrown@gmail.com> X-Original-To: python-announce-list@python.org Delivered-To: python-announce-list@mail.python.org X-Spam-Status: OK 0.000 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'objects': 0.03; 'pip': 0.03; 'url:github': 0.03; 'api.': 0.04; 'url-ip:140.82.118/24': 0.04; 'url-ip:140.82/16': 0.04; 'practices': 0.05; 'pypi': 0.05; 'subject:ANN': 0.05; 'skip:` 10': 0.07; 'url-ip:137.116/16': 0.07; 'cursor': 0.09; 'deprecated': 0.09; 'referenced': 0.09; 'url- ip:137.116.78.48/32': 0.09; 'url-ip:137.116.78/24': 0.09; 'url:pypi': 0.09; 'values': 0.14; '--upgrade': 0.16; '0.9.6': 0.16; 'broader': 0.16; 'objects.': 0.16; 'sequences': 0.16; 'subclasses': 0.16; 'subject:Released': 0.16; 'url:project': 0.16; 'url:readthedocs': 0.16; 'url-ip:140/8': 0.18; 'url:io': 0.18; 'api': 0.19; 'import': 0.21; 'url-ip:151.101.0.223/32': 0.23; 'url-ip:151.101.128.223/32': 0.23; 'url-ip:151.101.192.223/32': 0.23; 'url-ip:151.101.64.223/32': 0.23; 'syntax': 0.24; 'install': 0.24; 'handling': 0.25; 'url-ip:137/8': 0.25; 'classes': 0.26; 'url-ip:151.101.192/24': 0.26; 'url-ip:151.101.0/24': 0.26; 'url- ip:151.101.128/24': 0.26; 'url-ip:151.101.64/24': 0.26; 'instead': 0.27; '...': 0.28; 'quantities': 0.29; 'to:addr:python-announce- list': 0.29; 'url-ip:151.101/16': 0.31; 'url-ip:151/8': 0.31; 'header:In-Reply-To:1': 0.31; 'message-id:@mail.gmail.com': 0.32; 'but': 0.33; 'testing': 0.34; 'received:google.com': 0.35; 'subject:: ': 0.36; 'missing': 0.36; 'supporting': 0.36; '(like': 0.37; 'docs': 0.37; 'still': 0.38; '8bit%:8': 0.38; 'definition': 0.39; 'projects.': 0.39; 'version': 0.39; 'less': 0.61; 'skip:n 10': 0.61; 'skip:= 30': 0.61; '\xc2\xa0\xc2\xa0': 0.61; 'skip:o 10': 0.63; 'available.': 0.63; 'interface.': 0.66; 'speed': 0.71; 'quality': 0.74; 'assurance': 0.75; 'extra': 0.76; '8bit%:27': 0.80; 'upgrade': 0.80; 'preparation': 0.82; '*no': 0.84; 'cleaned': 0.84; 'treat': 0.86; 'quantitative': 0.91; 'skip:\xc2 30': 0.91; 'skip:\xc2 20': 0.97 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=PlOLpzF29QF34EM/C4nBlwUevZOMQke7dbebk/x+uZU=; b=sl57cYW3PqMsKecIGQITPlZQnJgVIjbTpg9cMkjdGlfO0m9SukPxbTG0q4eRS61wgU Osh6FhcVes+A5CNa1Y/1DO1y0QJ9F1TTTjoI4evBBttXHgZOxK8AcKIVpcAbO2b4whFw 5v32K9gVK1ZNtR9+wB4EskmVekomDEuv+vRIYUCMQcZ0qsnCm0MAN01GnPtl05DIBD/5 AEqZiC9UfoetXOkib1LSB+4mv68H1MPYn3S04fQVO9mcP8HzVglYPnDQTEoecCskWmK4 Uh9vvS8fppf9lKmcTVlg0+yUaLZ4RlTSnxgX3PTjZdoC/RQnY9Qxqw67AWSmUMNcd4uk 2Cow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=PlOLpzF29QF34EM/C4nBlwUevZOMQke7dbebk/x+uZU=; b=YwDeBJcqokUmChypCHD+kiI0OY+woOGFMeOdQuCp94IyPjHLEKwuk+i5p+JTVhb07f PnWQBJiqSSB18U+wSePGsw0PjZcyBNDAMN8kyNer08w4fg6ynXbRlp2/m50M2q+tFOmI pfgW1tkck83f20tP9OQAnulqcC9l8DE4YprP79GLXUOmyk66ntxmcH+xZ+gtST5vep2f noIctTK/nFZALOU0qKRpcThmSlq9uZQKtO14y22RGxTz8cEi4WjtoUAh2a2s0S3kjtrU ODqy0YS5C7F2q3s8QeGt8HQWtRMtr91QCnbjZjnZNVHBkU1oDIAhPGSUZnSq6esINF4F lFKw== X-Gm-Message-State: APjAAAUWkbQqeSLpi3A5DuTzwO5WUoMgmpMiLHNxjKJRXlljHty/EDRh V0JXIrSG8kzgXAvy6yXOsS5UrUxn8mRrz9L2frFr1rFQ X-Google-Smtp-Source: APXvYqx2In9ff4KDpPnsRrOitfjXq+9jTdyVpa3uPZNzLR/SsggMM19ITCQcDabHheIybSP36i3CwKKBmHAPBmHOMso= X-Received: by 2002:a2e:9ed6:: with SMTP id h22mr13020633ljk.29.1559536933068; Sun, 02 Jun 2019 21:42:13 -0700 (PDT) In-Reply-To: X-Mailman-Approved-At: Tue, 04 Jun 2019 09:08:59 -0400 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: python-announce-list@python.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Announcement-only list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: X-Mailman-Original-References: Xref: csiph.com comp.lang.python.announce:3125 Datatest version 0.9.6 is now available. Datatest helps speed up and formalize data-wrangling and data validation tasks. It repurposes software testing practices for data preparation and quality assurance projects. * Docs - https://datatest.readthedocs.io/ * PyPI - https://pypi.org/project/datatest/ * Devel - https://github.com/shawnbrown/datatest Upgrade an existing installation: pip install --upgrade datatest What's New in Datatest 0.9.6: * Cleaned up the acceptance API to make it both less verbose and more expressive: * Consolidated specific-instance and class-based acceptances into a single interface. * Added a new accepted.tolerance() method that subsumes the behavior of accepted.deviation() by supporting Missing and Extra quantities in addition to Deviation objects. * Deprecated old methods: ======================= ================================== Old Syntax New Syntax ======================= ================================== accepted.specific(...) accepted(...) accepted.missing() accepted(Missing) accepted.extra() accepted(Extra) *NO EQUIVALENT* accepted(CustomDifferenceClass) accepted.deviation(...) accepted.tolerance(...) accepted.limit(...) accepted.count(...) *NO EQUIVALENT* accepted.count(..., scope='group') ======================= ================================== Other methods--accepted.args(), accepted.keys(), etc.--remain unchanged. * Changed validation to generate Deviation objects for a broader definition of quantitative values (like datetime objects)--not just for subclasses of numbers.Number. * Changed handling for pandas.Series objects to treat them as sequences instead of mappings. * Added handling for DBAPI2 cursor objects to automatically unwrap single-value rows. * Removed acceptance classes from datatest namespace--these were inadvertently added in a previous version but were never part of the documented API. They can still be referenced via the `acceptances` module: from datatest.acceptances import ...