A toolbar overlay for debugging Flask applications

Overview

Flask Debug-toolbar

This is a port of the excellent django-debug-toolbar for Flask applications.

https://travis-ci.org/flask-debugtoolbar/flask-debugtoolbar.png?branch=master

Installation

Installing is simple with pip:

$ pip install flask-debugtoolbar

Usage

Setting up the debug toolbar is simple:

from flask import Flask
from flask_debugtoolbar import DebugToolbarExtension

app = Flask(__name__)

# the toolbar is only enabled in debug mode:
app.debug = True

# set a 'SECRET_KEY' to enable the Flask session cookies
app.config['SECRET_KEY'] = '<replace with a secret key>'

toolbar = DebugToolbarExtension(app)

The toolbar will automatically be injected into Jinja templates when debug mode is on. In production, setting app.debug = False will disable the toolbar.

See the documentation for more information.

Comments
  • Fixed scrollbar issues

    Fixed scrollbar issues

    Fixes #181 where the scrollbar would not show on any page other than the sqlalchemy_select.html template. The scroll classname is now properly named and applied throughout all panel templates as flDebugScroll. I've also added a 10px bottom padding to show the end of the inner panel (for aesthetics sake).

    opened by caffeinatedMike 14
  • Python 3 compatibility

    Python 3 compatibility

    Recent updates to Flask and related components have included support for Python 3, and it would be great to be able to use Flask-DebugToolbar in projects running on Python 3. As it stands now, Flask-DebugToolbar must be disabled in such projects in order to run them without errors.

    Are there plans to support Python 3 in the near future?

    opened by justinmayer 13
  • Can't move ProfilerDebugPanel above RequestVarsDebugPanel

    Can't move ProfilerDebugPanel above RequestVarsDebugPanel

    If you reorder DEBUG_TB_PANELS so ProfilerDebugPanel comes before RequestVarsDebugPanel, you'll get an obscure error: AttributeError: 'functools.partial' object has no attribute '__module__'

    This is OK:

    DEBUG_TB_PANELS = [
        'flask_debugtoolbar.panels.request_vars.RequestVarsDebugPanel',
        'flask_debugtoolbar.panels.profiler.ProfilerDebugPanel',
    ]
    

    This is not:

    DEBUG_TB_PANELS = [
        'flask_debugtoolbar.panels.profiler.ProfilerDebugPanel',
        'flask_debugtoolbar.panels.request_vars.RequestVarsDebugPanel',
    ]
    

    Screen Shot 2013-03-08 at 7 41 37 PM

    opened by appsforartists 6
  • memory leak over time

    memory leak over time

    I'm still gathering data, but it appears as though recent flask-debugtoolbar versions cause a memory leak. After I upgraded to Flask and Werkzeug 0.8 I also had to update flask-debugtoolbar from baecf852dda0f5b6c4700fb6deaeda4068b3a19c to current master (45ce65c058a580d80e2ac207689601edef5db24b), I've been noticing memory usage growing on every request made against the server.

    I've disabled my custom panels and the ones from MongoEngine but left TimerDebugPanel, HeaderDebugPanel, RequestVarsDebugPanel, TemplateDebugPanel, LoggingPanel and ProfilerDebugPanel enabled.

    Here is the output from heapy for a run with the debug panel disabled with DEBUG_TB_ENABLED=False. The first set is the total number of objects by type. The second set is the types of the objects that refer to the ones in the front. If you are familiar with heapy, the former is heap() and the latter is heap().byrcsL

    Partition of a set of 202 objects. Total size = 40656 bytes.
     Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
         0     11   5     9224  23      9224  23 dict (no owner)
         1     16   8     8456  21     17680  43 types.FrameType
         2     59  29     5128  13     22808  56 str
         3     30  15     3728   9     26536  65 unicode
         4     16   8     1600   4     28136  69 list
         5      1   0     1048   3     29184  72 dict of flask.ctx.RequestContext
         6      1   0     1048   3     30232  74 dict of flask.wrappers.Request
         7      1   0     1048   3     31280  77 dict of flask.wrappers.Response
         8      1   0     1048   3     32328  80 dict of mimetools.Message
         9      1   0     1048   3     33376  82 dict of werkzeug.routing.MapAdapter
    <35 more rows. Type e.g. '_.more' to view.>
    
    Partition of a set of 202 objects. Total size = 40656 bytes.
     Index  Count   %     Size   % Cumulative  % Referrers by Kind (class / dict of class)
         0     22  11     7912  19      7912  19 types.FrameType
         1     67  33     7736  19     15648  38 dict (no owner)
         2      1   0     3352   8     19000  47 __builtin__.cell, dict of flask.wrappers.Request, dict
                                                 of werkzeug.datastructures.EnvironHeaders,
                                                 types.FrameType
         3     17   8     3136   8     22136  54 list
         4      6   3     1472   4     23608  58 dict of mimetools.Message
         5      2   1     1120   3     24728  61 dict of 0x7fca19073b90
         6      1   0     1048   3     25776  63 flask.ctx.RequestContext
         7      1   0     1048   3     26824  66 flask.wrappers.Request
         8      1   0     1048   3     27872  69 flask.wrappers.Response
         9      1   0     1048   3     28920  71 mimetools.Message
    <41 more rows. Type e.g. '_.more' to view.>
    

    A run with the debug toolbar enabled:

    Partition of a set of 538 objects. Total size = 81920 bytes.
     Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
         0     35   7    20552  25     20552  25 dict (no owner)
         1    135  25    11128  14     31680  39 str
         2    122  23    10472  13     42152  51 tuple
         3     16   3     8208  10     50360  61 types.FrameType
         4     34   6     4064   5     54424  66 unicode
         5     31   6     4024   5     58448  71 list
         6     46   9     1104   1     59552  73 int
         7      1   0     1048   1     60600  74 dict of blinker._saferef.BoundMethodWeakref
         8      1   0     1048   1     61648  75 dict of flask.ctx.RequestContext
         9      1   0     1048   1     62696  77 dict of flask.wrappers.Request
    <79 more rows. Type e.g. '_.more' to view.>
    
    Partition of a set of 538 objects. Total size = 81920 bytes.
     Index  Count   %     Size   % Cumulative  % Referrers by Kind (class / dict of class)
         0    143  27    16712  20     16712  20 list
         1     30   6    12544  15     29256  36 types.FrameType
         2     83  15    10000  12     39256  48 dict (no owner)
         3    116  22     6592   8     45848  56 tuple
         4      1   0     3352   4     49200  60 __builtin__.cell, dict (no owner), dict of
                                                 flask.wrappers.Request, dict of
                                                 werkzeug.datastructures.EnvironHeaders, types.FrameType
         5      6   1     1472   2     50672  62 dict of mimetools.Message
         6      2   0     1120   1     51792  63 dict of 0x7f9d02073f00
         7      1   0     1048   1     52840  65 blinker._saferef.BoundMethodWeakref
         8      1   0     1048   1     53888  66 dict of
                                                 flask_debugtoolbar.panels.headers.HeaderDebugPanel
         9      1   0     1048   1     54936  67 flask.ctx.RequestContext
    <84 more rows. Type e.g. '_.more' to view.>
    

    Hopefully you can see that the dict, str, and tuple usage is much larger with the debug toolbar, and that list objects seem to be holding a large number of references, with dict also in there. Is it possible that the toolbar is holding onto references that isn't being released?

    I'm going to investigate a bit more and see if there is anything that stands out in the diffs between the two commits I referenced earlier, and to see if it seems to be an issue with a particular panel.

    opened by joeshaw 6
  • Case insensitive rfind is error prone.

    Case insensitive rfind is error prone.

    https://github.com/mgood/flask-debugtoolbar/blob/master/flask_debugtoolbar/init.py#L205

    if you have a utf-8 character where the capital letter is represented in 1 byte, but the lower case character is represented in 2 bytes, then the location of the closing body tag fails.

    İstanbulİstanbulİstanbul

    The first character is problematic. A solution would be take in the closing tag string as a config argument and not do any lowering during string comparison.

    opened by bmorgan21 5
  • Deprecated import from flask.ext.sqlalchemy

    Deprecated import from flask.ext.sqlalchemy

    This import is throwing a deprecation warning with Flask 0.11

    flask_debugtoolbar/panels/sqlalchemy.py:2:    from flask.ext.sqlalchemy import get_debug_queries, SQLAlchemy
    
    opened by mlenzen 5
  • Flask Debug Toolbar Does Not Check For A Compressed Response

    Flask Debug Toolbar Does Not Check For A Compressed Response

    If you have an extension like Flask Compress compressing the contents of your responses with gzip before it's sent back to the user, flask debug toolbar will throw an error because it assumes the response is UTF-8 HTML.

    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
        return self.wsgi_app(environ, start_response)
      File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
        response = self.make_response(self.handle_exception(e))
      File "/usr/local/lib/python2.7/site-packages/flask_restful/__init__.py", line 270, in error_router
        return original_handler(e)
      File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
        reraise(exc_type, exc_value, tb)
      File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
        response = self.full_dispatch_request()
      File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1479, in full_dispatch_request
        response = self.process_response(response)
      File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1691, in process_response
        response = handler(response)
      File "/usr/local/lib/python2.7/site-packages/flask_debugtoolbar/__init__.py", line 202, in process_response
        response_html = response.data.decode(response.charset)
      File "/usr/local/Cellar/python/2.7.10/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_8.py", line 16, in decode
        return codecs.utf_8_decode(input, errors, True)
    UnicodeDecodeError: 'utf8' codec can't decode byte 0x8b in position 1: invalid start byte
    
    opened by JackStouffer 5
  • Invalid unicode handling

    Invalid unicode handling

    When logging sql statements with sqlalchemy panel the following exception is thrown:

    Traceback (most recent call last): File "C:\Python27\lib\site-packages\flask\app.py", line 1518, in call return self.wsgi_app(environ, start_response) File "C:\Python27\lib\site-packages\flask\app.py", line 1506, in wsgi_app response = self.make_response(self.handle_exception(e)) File "C:\Python27\lib\site-packages\flask\app.py", line 1504, in wsgi_app response = self.full_dispatch_request() File "C:\Python27\lib\site-packages\flask\app.py", line 1266, in full_dispatch_request response = self.process_response(response) File "C:\Python27\lib\site-packages\flask\app.py", line 1414, in process_response response = handler(response) File "C:\Python27\lib\site-packages\flask_debugtoolbar__init__.py", line 171, in process_response toolbar_html = self.debug_toolbars[real_request].render_toolbar() File "C:\Python27\lib\site-packages\flask_debugtoolbar\toolbar.py", line 74, in render_toolbar return template.render(**context) File "C:\Python27\lib\site-packages\jinja2\environment.py", line 894, in render return self.environment.handle_exception(exc_info, True) File "C:\Python27\lib\site-packages\flask_debugtoolbar\templates\base.html", line 48, in top-level template code {{ panel.content()|safe }} File "C:\Python27\lib\site-packages\flask_debugtoolbar\panels\sqlalchemy.py", line 79, in content query.statement + _params).hexdigest() UnicodeDecodeError: 'ascii' codec can't decode byte 0xb2 in position 0: ordinal not in range(128)

    As far as I understand, the panel concatenates application SECRET_KEY and query statement and params. My secret key is a byte string which contains some non-ascii characters like "'\xb2q\xf6\x8c\xcd\xd0\x023...". I had generated it with the following method which has been described in Flask quickstart docs:

    import os os.urandom(24) '\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'

    http://flask.pocoo.org/docs/quickstart/

    opened by cenkalti 5
  • JavaScript error when using HTML5 boilerplate

    JavaScript error when using HTML5 boilerplate

    The toolbar's CSS file isn't injected into the template when using the HTML5 boilerplate <html> element:

    <!doctype html>
    <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
    <!--[if IE 7]>    <html class="no-js ie7 oldie" lang="en"> <![endif]-->
    <!--[if IE 8]>    <html class="no-js ie8 oldie" lang="en"> <![endif]-->
    <!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
    

    I would submit a pull request but I can't seem to find where this is being done.

    opened by mattupstate 5
  • No toolbar on either Chrome or firefox

    No toolbar on either Chrome or firefox

    I added the flask debug toolbar to my app. It looks working because it gave me the redirect warning like below:

    _Redirect (302) Location: /app/bokeh

    The Flask Debug Toolbar has intercepted a redirect to the above URL for debug viewing purposes. You can click the above link to continue with the redirect as normal. If you'd like to disable this feature, you can set the config variable DEBUG_TB_INTERCEPT_REDIRECTS to False._

    But there is no FDT tool bar shown up after I got the response. I tried both Chrome and Firefox, same result. Do I need to do any configuration on the browser side to display the toolbar?

    opened by johnxpan 4
  • flask.ext was deprecated

    flask.ext was deprecated

    "flask.ext" (https://github.com/pallets/flask/issues/1135) has been deprecated a while ago. FdT keeps importing flask_sqlalchemy with flask.ext resulting in warning messages:

    exthook.py:71: ExtDeprecationWarning: Importing flask.ext.sqlalchemy is deprecated, use flask_sqlalchemy instead

    opened by nad2000 4
  • Subdomains support

    Subdomains support

    I have an issue with subdomain support. It seems that debug toolbar is always loading on the main domain but not the subdomains.

    For example, if I have test.com, admin.test.com, and user.test.com. When I go to admin.test.com or user.test.com debug toolbar is loading all js, styles etc from test.com and if test.com is blocked it is not loading anything at all.

    What will be good is that if I go to user.test.com it will load everything from it. If I go to admin.test.com it will load from it and when I go to test.com it will load from it.

    I can work on pr for this just not sure what should be changed to support it and where?

    opened by rimvislt 0
  • Drop support for python 2

    Drop support for python 2

    It's probably time we dropped support for python 2: https://github.com/pallets-eco/flask-debugtoolbar/blob/e3c8ab0ca28d7ddfaaa731ef1e15649182255c6a/setup.cfg#L33

    Given that Flask requires 3.7, I'd be fine with jumping straight to that... anyone who is on an older version of python can continue using an older version of Flask.

    There's no immediate pressing need to jump to the latest python, but it makes future contributors lives easier because they don't have to worry about such a wide swathe of backwards compatibility.

    First though we should push a final 2.x compatible release, that's tracked in https://github.com/pallets-eco/flask-debugtoolbar/issues/192... only once that's done should we do this.

    opened by jeffwidman 0
  • New release incorporating the Flask-SQLAlchemy 3.x changes

    New release incorporating the Flask-SQLAlchemy 3.x changes

    Now that https://github.com/pallets-eco/flask-debugtoolbar/pull/186 has landed, we should push a release so folks can use it.

    This will likely happen as part of #188 because we'll need to update the project metadata links anyway for PyPI.

    opened by jeffwidman 0
  • Update CI workflows

    Update CI workflows

    @nickjj suggested we migrate from Travis to GitHub actions... We should definitely do that:

    • [ ] Add new GitHub workflows
    • [ ] Update the CI links in the readme to point at them instead of Travis: https://github.com/pallets-eco/flask-debugtoolbar/blob/master/README.rst
    • [ ] Delete old travis workflows
    • [x] I looked into deleting the travis org for https://travis-ci.org/github/flask-debugtoolbar (xref #188) but it looks like this isn't even possible... the page has a banner at the top about migrating to travis.ci and says builds stopped two years ago.
    opened by jeffwidman 0
  • Migrate the repo to `pallets-eco/flask-debugtoolbar`

    Migrate the repo to `pallets-eco/flask-debugtoolbar`

    We're migrating the location of this repo from flask-debugtoolbar/flask-debugtoolbar to pallets-eco/flask-debugtoolbar to co-locate it alongside a number of other popular Flask-related extensions.

    In order to complete this migration, we need to do a few things:

    • [x] transfer the repository to the pallets-eco org
    • [x] Make myself & @nickjj repo admins - this needs @davidism
    • [x] Make @mattaw a repo collaborator - I think I can do this once @davidism adds him to the pallets-eco org
    • [ ] Make @davidism and @ThiefMaster owners on https://pypi.org/project/Flask-DebugToolbar/ in case we ever need to publish an immediate security update or something more trusted users have access- I just sent them invites
    • [ ] Update outdated links to mgood/flask-debugtoolbar or flask-debugtoolbar/flask-debugtoolbar to point to pallets-eco/flask-debugtoolbar instead... I currently see some in https://github.com/pallets-eco/flask-debugtoolbar/blob/master/docs/index.rst and https://github.com/pallets-eco/flask-debugtoolbar/blob/master/setup.cfg
    • [ ] Cut a new release of flask-debugtoolbar and push to PyPI so that the project metadata on https://pypi.org/project/Flask-DebugToolbar/ points to the correct URLs.
    opened by jeffwidman 0
Releases(0.13.1)
  • 0.13.1(Mar 29, 2022)

    What's Changed

    • Fix setup.cfg to include package files by @nickjj in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/172
    • Use a consistent version naming convention, 0.13 should have been 0.13.0 but it was yanked and you can't re-push yanked packages with the same version

    Full Changelog: https://github.com/flask-debugtoolbar/flask-debugtoolbar/compare/0.12.1...0.13.1

    Source code(tar.gz)
    Source code(zip)
  • 0.12.1(Mar 28, 2022)

  • 0.12.0(Mar 28, 2022)

    What's Changed

    • Fix SQLAlchemy SELECT/EXPLAIN to use url_for to respect app prefixes.… by @mattaw in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/143
    • Add flask.g section to show g object content. by @Yaser-Amiri in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/118
    • Change docs to pull version from setup.py by @jeffwidman in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/108
    • Update README.rst by @jeffwidman in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/147
    • Setup DB properly by @jeffwidman in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/148
    • Cleanup version handling slightly by @jeffwidman in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/149
    • Support gzip response by @zaw007 in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/154
    • prefixed css classes, fixes #152 by @jnnkB in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/153
    • Remove deprecated Jinja with_ extension for Jinja 3.0 (related to Flask 2.0) by @nickjj in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/157
    • Update PyPI metadata files: add setup.cfg etc by @jeffwidman in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/164

    New Contributors

    • @mattaw made their first contribution in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/143
    • @Yaser-Amiri made their first contribution in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/118
    • @zaw007 made their first contribution in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/154
    • @jnnkB made their first contribution in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/153
    • @nickjj made their first contribution in https://github.com/flask-debugtoolbar/flask-debugtoolbar/pull/157

    Full Changelog: https://github.com/flask-debugtoolbar/flask-debugtoolbar/compare/0.11.0...v0.12.0

    Source code(tar.gz)
    Source code(zip)
  • 0.11.0(Feb 18, 2020)

    Enhancements:

    • Switch to Flask's native CLI, dropping flask_script in the process (b92391d, thanks @jeffwidman)
    • Do not show DebugToolbar routes in the route map (#86, thanks @floqqi)
    • Document Pygments for SQL highlighting (#127, thanks @pgiraud)

    Fixes:

    • Remove deprecated flask.json_available (#119, thanks @davidism)
    • Remove deprecated request.is_xhr (7ce099c, thanks @jeffwidman)
    • Explicitly disable SQLALCHEMY_TRACK_MODIFICATIONS (9c7db48, thanks @jeffwidman)
    • Fix typo (#142, thanks @timgates42)
    Source code(tar.gz)
    Source code(zip)
Aplikasi otomasi klik di situs popcat.click menggunakan Python dan Selenium

popthe-popcat Aplikasi Otomasi Klik di situs popcat.click. aplikasi ini akan secara otomatis melakukan click pada kucing viral itu, sehingga anda tida

cndrw_ 2 Oct 07, 2022
Pyramid debug toolbar

pyramid_debugtoolbar pyramid_debugtoolbar provides a debug toolbar useful while you're developing your Pyramid application. Note that pyramid_debugtoo

Pylons Project 95 Sep 17, 2022
A complete test automation tool

Golem - Test Automation Golem is a test framework and a complete tool for browser automation. Tests can be written with code in Python, codeless using

486 Dec 30, 2022
A library for generating fake data and populating database tables.

Knockoff Factory A library for generating mock data and creating database fixtures that can be used for unit testing. Table of content Installation Ch

Nike Inc. 30 Sep 23, 2022
It helps to use fixtures in pytest.mark.parametrize

pytest-lazy-fixture Use your fixtures in @pytest.mark.parametrize. Installation pip install pytest-lazy-fixture Usage import pytest @pytest.fixture(p

Marsel Zaripov 299 Dec 24, 2022
Custom Selenium Chromedriver | Zero-Config | Passes ALL bot mitigation systems (like Distil / Imperva/ Datadadome / CloudFlare IUAM)

Custom Selenium Chromedriver | Zero-Config | Passes ALL bot mitigation systems (like Distil / Imperva/ Datadadome / CloudFlare IUAM)

Leon 3.5k Dec 30, 2022
LuluTest is a Python framework for creating automated browser tests.

LuluTest LuluTest is an open source browser automation framework using Python and Selenium. It is relatively lightweight in that it mostly provides wr

Erik Whiting 14 Sep 26, 2022
FaceBot is a script to automatically create a facebook account using the selenium and chromedriver modules.

FaceBot is a script to automatically create a facebook account using the selenium and chromedriver modules. That way, we don't need to input full name, email and password and date of birth. All will

Fadjrir Herlambang 2 Jun 17, 2022
Tutorial for integrating Oxylabs' Residential Proxies with Selenium

Oxylabs’ Residential Proxies integration with Selenium Requirements For the integration to work, you'll need to install Selenium on your system. You c

Oxylabs.io 8 Dec 08, 2022
UX Analytics & A/B Testing

UX Analytics & A/B Testing

Marvin EDORH 1 Sep 07, 2021
Green is a clean, colorful, fast python test runner.

Green -- A clean, colorful, fast python test runner. Features Clean - Low redundancy in output. Result statistics for each test is vertically aligned.

Nathan Stocks 756 Dec 22, 2022
A wrapper for webdriver that is a jumping off point for web automation.

Webdriver Automation Plus ===================================== Description: Tests the user can save messages then find them in search and Saved items

1 Nov 08, 2021
PacketPy is an open-source solution for stress testing network devices using different testing methods

PacketPy About PacketPy is an open-source solution for stress testing network devices using different testing methods. Currently, there are only two c

4 Sep 22, 2022
Find index entries in $INDEX_ALLOCATION attributes

INDXRipper Find index entries in $INDEX_ALLOCATION attributes Timeline created using mactime.pl on the combined output of INDXRipper and fls. See: sle

32 Nov 05, 2022
A set of pytest fixtures to test Flask applications

pytest-flask An extension of pytest test runner which provides a set of useful tools to simplify testing and development of the Flask extensions and a

pytest-dev 433 Dec 23, 2022
Multi-asset backtesting framework. An intuitive API lets analysts try out their strategies right away

Multi-asset backtesting framework. An intuitive API lets analysts try out their strategies right away. Fast execution of profit-take/loss-cut orders is built-in. Seamless with Pandas.

Epymetheus 39 Jan 06, 2023
pytest splinter and selenium integration for anyone interested in browser interaction in tests

Splinter plugin for the pytest runner Install pytest-splinter pip install pytest-splinter Features The plugin provides a set of fixtures to use splin

pytest-dev 238 Nov 14, 2022
Tools for test driven data-wrangling and data validation.

datatest: Test driven data-wrangling and data validation Datatest helps to speed up and formalize data-wrangling and data validation tasks. It impleme

269 Dec 16, 2022
pywinauto is a set of python modules to automate the Microsoft Windows GUI

pywinauto is a set of python modules to automate the Microsoft Windows GUI. At its simplest it allows you to send mouse and keyboard actions to windows dialogs and controls, but it has support for mo

3.8k Jan 06, 2023
Python Moonlight (Machine Learning) Practice

PyML Python Moonlight (Machine Learning) Practice Contents Design Documentation Prerequisites Checklist Dev Setup Testing Run Prerequisites Python 3 P

Dockerian Seattle 2 Dec 25, 2022