A tool that ensures consistent string quotes in your Python code.

Overview

pyquotes Tests

Single quotes are superior. And if you disagree, there's an option for this as well.

In any case, quotes should be consistent throughout the codebase, and not rely on tools like black that reformat everything. Of course using those tools is perfectly fine if you want this behavior, but sometimes you just want to avoid discussing the quote style during PR reviews).

Installation

Install pyquotes using pip:

$ pip install pyquotes

Usage

$ pyquotes --help
Usage: pyquotes [OPTIONS] FILES...

  A tool that ensures consistent string quotes in your Python code.

  When passing a directory, all *.py files inside will be processed
  recursively.

  If any files needed changes, it exits with a non-zero status code.

Options:
  -V, --version                 Show the version and exit.
  -h, --help                    Show this message and exit.
  -D, --double-quotes           Prefer double quotes.
  -q, --quiet                   Do not output which files have been
                                reformatted.

  -v, --verbose                 Be more verbose and show all files being
                                processed.

  -d, --diff                    Only show diffs without updating files.
  -c, --check-only, --check     Only check files without updating them.
  --exclude PATTERN             Exclude files/directories matching this
                                pattern. Can be used multiple times. Replaces
                                the built-in excludes. Does not apply to
                                explicitly-specified files.

  -X, --extend-exclude PATTERN  Exclude files/directories matching this
                                pattern. Can be used multiple times. Extends
                                the built-in excludes. Does not apply to
                                explicitly-specified files.

Use --diff or --check-only if you want to run this script in CI (usually using flake8-quotes as explained below is the better choice though).

Configuration

exclude, extend-exclude and double-quotes can be configured via the following files (looked up in this order, the first one containing settings is used):

  • .pyquotes.cfg - ConfigParser format, settings or pyquotes section
  • setup.cfg - ConfigParser format, pyquotes or tool:pyquotes section
  • pyproject.toml - TOML format, tool.pyquotes section

Parsing pyproject.toml requires toml to be installed; a warning is emitted if the file exists and no config is found elsewhere and toml is missing.

Note that exclude should not be used in most cases; unless you really need to whitelist something that's excluded by default.

setup.cfg

[pyquotes]
double-quotes = false
extend-exclude =
    htmlcov
    .vscode

The same format can be used in .pyquotes.cfg as well.

pyproject.toml

[tool.pyquotes]
double-quotes = false
extend-exclude = ['htmlcov', '.vscode']

flake8

If you use flake8, you may want to install flake8-quotes to also get warnings if the code currently has incorrect quotes. You can use the following options if you want single quotes:

[flake8]
inline-quotes = single
multiline-quotes = single
docstring-quotes = double
avoid-escape = true

Note that flake8-quotes is completely independent from this tool, so inconsistencies are possible. Please open an issue if you discover any such cases.

You might also like...
You can share your Chegg account for answers using this bot with your friends without getting your account blocked/flagged

Chegg-Answer-Bot You can share your Chegg account for answers using this bot with your friends without getting your account blocked/flagged Reuirement

Instagram Story View Bot  Unencrypted Story Views is a helpful tool that allows thousands of people to watch your posts. It is completely free, source is visible for anyone to modify Type your username, wait for the bot to Automate the Task.
A GitHub Action that automatically reports your Advent of Code progress in a table in your README

Advent README Stars This action adds and maintains a stars report in your README based on your Advent of Code progress. Example Table 2021 Results Day

A self-bot for discord, written in Python, which will send you notifications to your desktop if it detects an intruder on your discord server

A self-bot for discord, written in Python, which will send you notifications to your desktop if it detects an intruder on your discord server

A simple python script to send files into your telegram Bot form your PC, Server etc.

telegramSend A simple python script to send files into your telegram Bot form your PC, Server etc. How to Use Install requirements.txt pip3 install -r

Python Tool To Get The Date That Your Account Joined Instagram

Date-Joined-Insta Python Tool To Get The Date That Your Account Joined Instagram You Dont Need To Login Just Enter The UserName If Id Did Not Work Ins

Notion4ever - Python tool for export all your content of Notion page using official Notion API
Notion4ever - Python tool for export all your content of Notion page using official Notion API

NOTION4EVER Notion4ever is a small python tool that allows you to free your cont

A powerful bot to copy your google drive data to your team drive
A powerful bot to copy your google drive data to your team drive

⚛️ Clonebot - Heroku version ⚡ CloneBot is a telegram bot that allows you to copy folder/team drive to team drives. One of the main advantage of this

Comments
  • Resolves #3 and #5

    Resolves #3 and #5

    • #3 Added a minimum version of click
    • #5 Force UTF-8 encoding on reading/writing

    I have not bumped version, and will leave that to you pending acceptance of these changes.

    Thank you.

    opened by ghost 6
  • Encoding issue

    Encoding issue

    OS: Windows 10 21H2 Python: Python 3.10.4

    Steps:

    • pip install pyquotes

    example.py (file is saved as UTF-8 with/without a BOM)

    print('こんにちは世界')
    
    • pyquotes example.py
        return codecs.charmap_decode(input,self.errors,decoding_table)[0]
    UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 11: character maps to <undefined>
    

    If read_text() and write_text() are replaced with read_bytes() and write_bytes() equivalents, the quote processing is fixed (not tested on Linux). Although, additional new lines are erroneously added, I haven't had a chance to look into why.

    Thank you for your time, this library has saved my many hours.

    opened by ghost 8
  • Parsing error

    Parsing error

    OS: Windows 10 21H2 Python: Python 3.10.4

    Steps:

    • pip install pyquotes

    example.py

    '''
    Example File
    '''
    
    A = "This is a test string."
    B = 'This is a test string.'
    C = "This isn't a test string, or is it?"
    D = f"{A}{B}{C}"
    E = f'{A}{B}{C}'
    
    • pyquotes example.py
    • pyquotes --check example.py
    • pyquotes -D example.py
    • pyquotes -D --check example.py

    All fail with the error

      File "C:\Python310\lib\site-packages\parso\python\tree.py", line 86, in get_doc_node
        c = simple_stmt.parent.children
    AttributeError: 'NoneType' object has no attribute 'children'
    

    If a print('Hello, World!') is added to the file, it behaves as expected.

    Thank you for your time, this library has saved my many hours.

    opened by ghost 4
  • click dependency not bounded

    click dependency not bounded

    OS: Windows 10 21H2 Python: Python 3.10.4

    Steps:

    • pip install "click<7"
    • pip install pyquotes

    example.py

    print("Hello, World!")
    

    pyquotes --check example.py pyquotes -D --check example.py

    Both fail with the error

      File "C:\Python310\lib\site-packages\pyquotes\settings.py", line 96, in __init__
        super().__init__(**settings, project_root=project_root)
    TypeError: _Config.__init__() got an unexpected keyword argument 'check'
    

    This is resolved when using click>=8.

    Thank you for your time, this library has saved my many hours.

    opened by ghost 2
Releases(v1.0.0)
Owner
Adrian
Adrian
Pls give vaccine.

Pls Give Vaccine A script to spam yourself with vaccine notifications. Explore the docs » View Demo · Report Bug · Request Feature Table of Contents A

Rohan Mukherjee 3 Oct 27, 2021
Versatile async-friendly library to retry failed operations with configurable backoff strategies

riprova riprova (meaning retry in Italian) is a small, general-purpose and versatile Python library that provides retry mechanisms with multiple backo

Tom 108 Apr 27, 2022
Fetch torrent links from nyaa, according to releases by smoke index.

Nyaa - Smoke's index torrent fetcher Description This script parses the local (or online) anime release index (csv format) made by Big Smoke. And uses

Dinank 21 Jun 08, 2022
Autofilter with imdb bot || broakcast , imdb poster and imdb rating

LuciferMoringstar_Robot How To Deploy Video Subscribe YouTube Channel Added Features Imdb posters for autofilter. Imdb rating for autofilter. Custom c

Muhammed 127 Dec 29, 2022
Simple Telegram AI Chat bot made using OpenAI and Luna API

Yui Yui, is a simple telegram chat bot made using OpenAI and Luna Chat bot Deployment 👀 Deploying is easy 🤫 ! You can deploy this bot in Heroku or i

I'm Not A Bot #Left_TG 21 Dec 29, 2022
Grocy-create-product - A script supports the batch creation of new products in Grocy

grocy-create-product This script supports the batch creation of new products in

André Heuer 6 Jul 28, 2022
Bot that embeds a random hysterical meme from Reddit into your text channel as an embedded message, using an API call.

Discord_Meme_Bot 🤣 Bot that embeds a random hysterical meme from Reddit into your text channel as an embedded message, using an API call. Add the bot

2 Jan 16, 2022
A simple script & container to pull COVID data from covidlive.com.au and post a summary to a slack channel

CovidLive AU Summary Slackbot This bot is a very simple slackbot that pulls data, summarises and posts up to date AU COVID stats to a provided slack c

James 3 Dec 18, 2021
A quick way to verify your Climate Hack.AI (2022) submission locally!

Climate Hack.AI (2022) Submission Validator This repository contains code that allows you to quickly validate your Climate Hack.AI (2022) submission l

Jeremy 3 Mar 03, 2022
Telegram bot to stream videos in telegram voicechat for both groups and channels.

Telegram bot to stream videos in telegram voicechat for both groups and channels. Supports live streams, YouTube videos and telegram media. With record stream support, Schedule streams, and many more

SOCIAL MECHANIC 4 Nov 13, 2022
Find songs by lyrics.

LyricSearch Hi, welcome to LyricSearch - a simple (Yes), fast (Maybe), and powerful (Approach) lyric search engine. We support Three search methods to

Dicer_ 1 Dec 13, 2021
Bot interpretation of the carbon.now.sh site

📒 Source code of the @PicodeBot 🧸 Developer: @hoosnick Run $ git clone https://github.com/hoosnick/picodebot.git $ pip install -r requirements.txt P

Husniddin Murodov 13 Oct 02, 2022
Talon accessibility - Experimental Talon integrations using macOS accessibility APIs

talon_accessibility Experimental Talon integrations using macOS accessibility AP

Phil Cohen 11 Dec 23, 2022
A simple versatile telgeram bot written in Python using pyTelegramBotAPI library.

A simple versatile telgeram bot written in Python using pyTelegramBotAPI library.

Benyamin Zojaji 15 Jun 17, 2022
This Discord bot is to give timely notifications to Students in the Lakehead CS 2021 Guild

Discord-Bot Goal of Project The purpose of this Discord bot is to give timely notifications to Students in the Lakehead CS 2021 Guild. How can I contr

8 Jan 30, 2022
Discord Webhook Spammer (fastest)

Discord Webhook Spammer A simple fast asynchronous webhook spammer. Spammer Features Fast message spamming. Controllable speed. Noob friendly. Usage N

Varient 2 Apr 22, 2022
𝐀 𝐦𝐨𝐝𝐮𝐥𝐚𝐫 𝐓𝐞𝐥𝐞𝐠𝐫𝐚𝐦 𝐆𝐫𝐨𝐮𝐩 𝐦𝐚𝐧𝐚𝐠𝐞𝐦𝐞𝐧𝐭 𝐛𝐨𝐭 𝐰𝐢𝐭𝐡 𝐮𝐥𝐭𝐢𝐦𝐚𝐭𝐞 𝐟𝐞𝐚𝐭𝐮𝐫𝐞𝐬

𝐇𝐨𝐰 𝐓𝐨 𝐃𝐞𝐩𝐥𝐨𝐲 For easiest way to deploy this Bot click on the below button 𝐌𝐚𝐝𝐞 𝐁𝐲 𝐒𝐮𝐩𝐩𝐨𝐫𝐭 𝐆𝐫𝐨𝐮𝐩 𝐒𝐨𝐮𝐫𝐜𝐞𝐬 𝐆𝐞𝐧𝐞?

Mukesh Solanki 2 Oct 06, 2021
批量下载抖音无水印视频

版权说明 本项目fork自Johnserf-Seed TikTokDownload。目的是为了增加个性化的功能,若想体验更多完善的功能请支持原作者的项目。 免责声明 本代码仅用于学习,下载后请勿用于商业用途。 环境要求 请检查宿主机,是否安装了python环境,并且配置了环境变量 pytho

Zhiwu Mao 44 Dec 28, 2022
Play Video & Music on Telegram Group Video Chat

Video Stream is an Advanced Telegram Bot that's allow you to play Video & Music on Telegram Group Video Chat 🧪 Get SESSION_NAME from below: Pyrogram

Sehath Perera 1 Jan 17, 2022
A telegram bot to read RSS feeds

Telegram bot to fetch RSS feeds This is a telegram bot that fetches RSS feeds in regular intervals and send it to you. The feed sources can be added o

Santhosh Thottingal 14 Dec 15, 2022