Skip to main content

A module that simplifies the boiling process when asking the user a question via a TTY interface. (A TUI version is being developed, to call it, just add TUI at the end of the class name)

Project description

Ask Question

PyPI - Python Version PyPI - Implementation PyPI - Wheel PyPI - Version PyPI - Downloads PyPI - License Execution status GitHub Workflow Status (with event) GitHub repo size GitHub Repo stars GitHub commit activity (branch) GitHub last commit (branch)

Static Badge

Description

This is a python package I created in order to simplify the boiling process when asking the user a question via TTY or TUI (Terminal User Interface).

Table of Content

  1. ask_question
  2. Description
  3. Table of Content
  4. Installation
    1. Using pip
    2. Using python
  5. Usage
    1. Importing
    2. Initialising
    3. Calling the pause function
    4. Asking a question
      1. Where do you live ?
      2. How old are you ?
      3. Do you like sugar ?
  6. Available boiling
  7. Change the initialisation content
    1. Changing the forbidden characters
    2. Changing the description
    3. Changing both
  8. Author
  9. Note to the devs

Installation

Using pip

pip install -U ask-question

Using python

Under windows:

py -m pip install -U ask-question

Under Linux/Mac OS:

python3 -m pip install -U ask-question

Usage

Importing

import ask_question as aq

Initialising

The generic class is: AskQuestion(human_type: dict = {}, illegal_characters_nb: str = "", tui: bool = False)

AQI = aq.AskQuestion()

Calling the pause function

The generic function is:

pause(self, pause_message: str = "Press enter to continue...")

The output is: None

AQI.pause("Press enter to continue...")

Asking a Question

The generic function to ask a question is:

ask_question(self, question: str, answer_type: str)

The outputs of this functions can be:

  • str = a string
  • int = a whole number
  • float = a floating number

Where do you live

answer = AQI.ask_question("Where are you from? ", "str")
print(f"You live in {answer}!")

How old are you

answer = AQI.ask_question("How old are you?", "uint")
ADD_S = ""
if answer > 1:
    ADD_S = "s"
print(f"You are {answer} year{ADD_S} old !")

Do you like sugar

answer = AQI.ask_question("Do you like sugar? [(Y)es/(n)o]: ", "bool")
if answer == True:
    print("You like sugar !")
else:
    print("You do not like sugar.")

Available boiling

Here are all the available boiling options and their explanation:

  • int = whole number (-1, 0, 1, 2, 3, etc...)
  • float = floating number (-1.2, 0.1, 1.2, etc...)
  • uint = whole positive number (0, 1, 2, etc...)
  • ufloat = whole positive floating number (0.1, 1.2, etc ...)
  • num = numeric (numbers from 0 onwards)
  • alnum = alphanumeric (only numbers and the alphabet)
  • alpha = alphabet (from a to z and A to Z)
  • char = alphabet (from a to z and A to Z)
  • ascii = ascii Table
  • str = string (any character you can type)
  • version = version (numbers separated by '.' characters)
  • ver = version (numbers separated by '.' characters)
  • bool = boolean (yes/True/1 or no/False/0 answer type)

Change the initialisation content

When initialising the class it is possible to change the forbidden characters and/or the descriptions of the available types.

changing the forbidden characters

import ask_question as aq
illegal_characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \\t\\n\\r\\x0b\\x0c"
illegal_characters = illegal_characters.replace("0123456789","")
AQI = aq.AskQuestion(dict(), illegal_characters)

This initialisation has changed the characters that will be allowed for the number conversion in the 'int' and 'float' options.

Changing the descriptions

import ask_question as aq
human_type = {
    "int":"whole number (-1, 0, 1, 2, 3, etc...)",
    "float":"floating number (-1.2, 0.1, 1.2, etc...)",
    "uint":"whole positive number (0, 1, 2, etc...)",
    "ufloat":"whole positive floating number (0.1, 1.2, etc ...)",
    "num":"numeric (numbers from 0 onwards)",
    "alnum":"alphanumeric (only numbers and the alphabet)",
    "alpha":"alphabet (from a to z and A to Z)",
    "char":"alphabet (from a to z and A to Z)",
    "ascii":"ascii Table",
    "str":"string (any character you can type)",
    "version":"version (numbers separated by '.' characters)",
    "ver":"version (numbers separated by '.' characters)",
    "bool":"boolean (yes/True/1 or no/False/0 answer type)",
}
AQI = aq.AskQuestion(human_type)

This initialisation has changed the descriptions for the types. When the user will enter a wrong answer, the description displayed for the type you were expecting will be taken from the human_type dictionnary you have entered.

Changing both

import ask_question as aq
illegal_characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \\t\\n\\r\\x0b\\x0c"
illegal_characters = illegal_characters.replace("0123456789","")
human_type = {
    "int":"whole number (-1, 0, 1, 2, 3, etc...)",
    "float":"floating number (-1.2, 0.1, 1.2, etc...)",
    "uint":"whole positive number (0, 1, 2, etc...)",
    "ufloat":"whole positive floating number (0.1, 1.2, etc ...)",
    "num":"numeric (numbers from 0 onwards)",
    "alnum":"alphanumeric (only numbers and the alphabet)",
    "alpha":"alphabet (from a to z and A to Z)",
    "char":"alphabet (from a to z and A to Z)",
    "ascii":"ascii Table",
    "str":"string (any character you can type)",
    "version":"version (numbers separated by '.' characters)",
    "ver":"version (numbers separated by '.' characters)",
    "bool":"boolean (yes/True/1 or no/False/0 answer type)",
}
AQI = aq.AskQuestion(human_type)

You have now impacted the int and float typing as well as the 'type' descriptions.

Author

This module was written by (c) Henry Letellier Attributions are appreciated.

Quick way (I assume you have already initialised the class):

print(f"AskQuestion is written by {AQI.author}")

Running unit tests

Although they might not be bundled in the module itself, you can clone the source repository, intall the requirement at the root and run pytest -s at the root of the repository to see the result.

Note to the devs

Due to the update of the packaging methods (switching from setup.py to pyproject.toml) and for package stability tracking reasons, it is now required (or strongly suggested) you remove the resulting ask_question package that gets installed alongside with it's dependencies.

You can do so with the following command: pip uninstall ask_question -y

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

ask_question-1.2.11.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

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

ask_question-1.2.11-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file ask_question-1.2.11.tar.gz.

File metadata

  • Download URL: ask_question-1.2.11.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.18

File hashes

Hashes for ask_question-1.2.11.tar.gz
Algorithm Hash digest
SHA256 8cbb3610cf6be929609573deda71443ed49935401bccea1cf3e8152b212b7908
MD5 476272f0559265320dc440427d5d0f8a
BLAKE2b-256 6d938992f0f6d2aa00375c18be5751a4267dd504285b256ad575df0525c26e54

See more details on using hashes here.

File details

Details for the file ask_question-1.2.11-py3-none-any.whl.

File metadata

  • Download URL: ask_question-1.2.11-py3-none-any.whl
  • Upload date:
  • Size: 12.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.18

File hashes

Hashes for ask_question-1.2.11-py3-none-any.whl
Algorithm Hash digest
SHA256 a72956b7018c122e060d55c92f3a57aabdc6e5c6a2111eac2c68a53d96f74b5e
MD5 1505155b37724b502dadcf7d0196aee6
BLAKE2b-256 2a2112f49059e57e92033474b019c13206c193ef23419890518fb59ab7003247

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