Skip to main content

A simple input while loop utility

Reason this release was yanked:

Breaking changes

Project description

inputwhile

A simple but helpful package that allows you to create input while loops with different conditions.

Explanation nobody cares about

Once, I was tired of writing:

value = input()
while not condition(value):
        value = input()

every time I wanted to check if a user entered the right value in a program.

So, I decided to make this package (my first one). It has a bunch of functions with pre-defined condition functions, but you can make custom inputwhiles too.

Installation

# Linux/macOS
python3 -m pip install inputwhile

# Windows
py -3 -m pip install inputwhile

Quick examples

Custom error messages

import inputwhile

# If input value is an empty string it will print "Enter your username:" again until input value is not empty
string = inputwhile.stringNotEmpty(
        "Enter your username:"
)

# If input value is an empty string it will print "You can't leave it empty. Please enter your username:" until input value is not empty.
string = inputwhile.stringNotEmpty(
        "Enter your username:",
        error_prompt="You can't leave it empty. Please enter your username:"
)

# error_prompt is optional, but is also in all package functions.

Number inputwhiles

import inputwhile

integer = inputwhile.integer(
        "Enter a number:",
        error_prompt="Invalid number. Please enter a valid number:"
)

floatNumber = inputwhile.floatInput(
        "Enter a float:",
        min=0.0,
        max=1.0 # You can add ranges too.
)

Custom types

import inputwhile
from myproject import BigInt

# Will request a value until it is parsable like: BigInt(value) and will return it with that type.
value = inputwhile.customTypeClass(
        "Enter the nuclear code:",
        typeClass=BigInt
)

Boolean inputwhiles

import inputwhile

# Only matches "true" or "false"
boolean = inputwhile.boolean(
        "It is illegal to keep a guinea pig in Switzerland. True or false?:",
        "Prompt not recognized. Please enter 'true' or 'false':"
)

# Matches "true", "t", "yes", "y", "1", "si", "sí", "s" or "false", "f", "no", "n", "0", "nope" by default.
flexibleBoolean = inputwhile.booleanFlexible(
        "Do you want to continue? (y/n):",
        trueStrings={"continue"},
        falseStrings={"exit"},
        doUseCustomNDefaults=True # Makes trueStrings and falseStrings being added to the default ones instead of replacing them.
)

regexBoolean = inputwhile.booleanFlexibleRegex(
        "Do you like tacos?:",
        trueRegex=f"^(yes|true|you don't have an idea|definitely|yes,[\s]*[\w]+)$"
        falseRegex=f"^(no|definitely no|never|no,[\s]*[\w]+)$"
        error_prompt="Prompt not recognized. Try again:"
)

Lists

import inputwhile

# List of strings
stringsList = inputwhile.listInput(
        "Enter the countries you have ever visited:",
        separator=",",
        error_prompt="Please, don't leave empty the input:",
        doStriptElements=True # Makes a element.strip() to every element in the list
)

# Can filter the list
from pathlib import Path
filteredList = inputwhile.listInput(
        "Enter the directories you want to scan:",
        separator=" ",
        error_prompt="Invalid directories. Please enter at least one directory:"
        filter_func=lambda x: Path(x).is_dir()
)

# Can map too
mappedList = inputwhile.listInput(
        "Enter the values of the Mexican peso per day in the last month:"
        error_prompt="Enter at least one value:"
        map_func=lambda x: int(x),
        filter_func=lambda x: inputwhile.utils.isParsable(x, int)
)

# Also sets available for unique values
setsToo = setInput(
        "Enter your social media urls:",
        separator=" ",
        error_prompt="Enter at least one url:"
        filter_func=lambda x: x.startswith("http")
)

# And of course regex
regexList = inputwhile.listRegex(
        "Enter your hobbies separated by commas:",
        regex_separator=r"[,]+",
        doStripElements=True
)

regexSet = inputwhile.setRegex(
        "Enter the file extensions you like the most:"
        regex_separator=r"[.,\s]+"
)

Links

Twitter Github PyPI

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

inputwhile-1.1.1.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

inputwhile-1.1.1-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

Details for the file inputwhile-1.1.1.tar.gz.

File metadata

  • Download URL: inputwhile-1.1.1.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.5 {"installer":{"name":"uv","version":"0.11.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for inputwhile-1.1.1.tar.gz
Algorithm Hash digest
SHA256 5ba5fefd2fc86a061d6ab003d6b3585aaf95b58952661e4d8795936ea07abc5c
MD5 949707c2391f934f03b9508356f32db6
BLAKE2b-256 4ffa896be8f9d856b71ca0d9f90980e6fb5944777e6b0a444a8113b8f9db70d7

See more details on using hashes here.

File details

Details for the file inputwhile-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: inputwhile-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 7.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.5 {"installer":{"name":"uv","version":"0.11.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for inputwhile-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 afb006b16137631f54e96c35a72201d1c81b69152a0fc02f5e33cd58a3f9d7ed
MD5 73af554df8cb2722c6a39727641f8281
BLAKE2b-256 1ecd116ebc6131c630e0775eebd0505259b8bfd44200e4026c0a007d0cf214cf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page