Skip to main content

Tests Codecov Python PyPI

ccautils

a set of utilities for python3.6+ programs and scripts.

Install

Install for the user:

pip3 install ccautils --user

Install for a virtual environment:

pip install ccautils

Development

I use poetry to manage these utilities. Clone this repository and install poetry, then install the dependancies.

git clone https://github.com/ccdale/ccautils.git
cd ccautils
poetry install

Testing

To run the tests you must have pytest, nox and poetry installed.

install nox into your python user environment.

pip install nox --user

Run the tests with

nox -rs tests

Run the linter with

nox -rs lint

Run the console ask tests with

nox -rs tests -- -sm ask

Error Utilities(#headdd)

See the code for how to use these Exception helpers.

Miscellaneous Utilities

Usage

import ccautils.utils as UT

addToString(xstr, xadd)

Code

Returns a string with xadd appended to xstr. If xadd is a list, all str members of the list will be appended in order.

UT.addToString("hello", [" ", "world"])

> "hello world"

delimitString(xstr, delimeter=" - ")

Code

xstr can be a list or a string. If it is a string, it is spit apart at spaces and delimeted with delimeter. If it is a list, each member is delimeted with delimeter.

UT.delimitString(["bright", "world"], " ")

> "bright world"

UT.delimitString("I wandered lonely as an artichoke", ".")

> "I.wandered.lonely.as.an.artichoke"

makeDictFromString(istr)

Code

Constructs a dictionary from a string of parameters. Leading and trailing whitespace is stripped.

istr should be in the form someparam=somevalue,someotherparam=otherval

UT.makeDictFromString("sparam=sval, soparam = soval")

> {"sparam": "sval", "soparam": "soval"}

askMe(q, default)

Code

Requests input from the user. Poses the question q. Returns the users input or default if no input given.

UT.askMe("press 5, please", "8")

> press 5, please: 5
> 5

padStr(xstr, xlen=2, pad=" ", padleft=True)

Code

Returns xstr padded to the required length, either on the left (padleft is True) or the right (padleft is False)

UT.padStr("23", 5, "0")

> "00023"

reduceTime(unit, secs)

Code

Divides secs by unit returning a tuple of (units, remainder)

Raises a ValueError if unit is zero.

UT.reduceTime(3600, 3700)

> (1, 100)

displayValue(val, label, zero=True)

Code

Pluralises label if val > 1 or val is 0.

Will return an empty string if val == 0 and zero == True

UT.displayValue(12, "table")

> "12 tables"

secondsFromHMS(shms)

Code

converts HMS strings into integer seconds

UT.secondsFromHMS("01:01:23.43")
# 1 hour, 1 minute, 23 seconds + 0.43 second

> 3683

hms(secs, small=True, short=True, single=False, colons=False)

Code

Convert secs to days, hours, minutes and seconds

if small is True then only return the higher values if they are > zero

if short is True then the labels are their short form

if single is True then the labels are single letters

if colons is True then the output is of the form 01:03:23

UT.hms(67)

> "1 min and 7 secs"

UT.hms(67, short=False)

> "1 minute and 7 seconds"

UT.hms(67, small=False, short=False)

> "0 days, 0 hours, 1 minute and 7 seconds"

secs = 86400 + 7200 + 300 + 34
UT.hms(secs, single=True)

> "1d 2h 5m 34s"

secs = 345
UT.hms(secs, colons=True)

> "05:45"

secs = 86400 + 7200 + 300 + 34
UT.hms(secs, colons=True)

> "01:02:05:34"

fuzzyExpires(dt)

Code

Given a datetime object, computes the difference between now and that time. Returns a tuple of (ts: unix timestamp of dt, op: string)

The returned string gives the approximate time left between now and the dt object or the string 'EXPIRED'.


    """It returns 2 hours 20 minutes and some seconds."""
    ts = int(time.time())
    ts += (3600 * 2) + (60 * 20)
    dt = datetime.datetime.fromtimestamp(ts)
    gotts, gotstr = UT.fuzzyExpires(dt)


    """It returns 1 year and 2 months."""
    ts = int(time.time())
    ts += (86400 * 365) + (86400 * 70)
    dt = datetime.datetime.fromtimestamp(ts)
    gotts, gotstr = UT.fuzzyExpires(dt)

File Utilities

Usage

import ccautils.fileutils as FT

fileExists(fqfn)

Code

Tests for the existence of the fully-qualified (absolute) file name fqfn

Returns: True if fqfn exists, else False

fn = "/home/chris/output.csv"
if FT.fileExists(fn):
    # do something
else:
    raise(f"File {fn} does not exist")

dirExists(fqdn)

Code

Tests for the existence of the fully-qualified (absolute) directory name fqdn

Returns: True if fqdn exists, else False

dn = "/home/chris"
if FT.dirExists(dn):
    # do something
else:
    raise(f"Directory {dn} does not exist")

dfExists(fqdfn)

Code

Tests to see if the file fqdfn exists, if not checks if fqdfn is a directory that exists.

Returns: True if fqdfn exists, else False

dn = "/home/chris"
if FT.dfExists(dn):
    # do something
else:
    raise(f"File / Directory {dn} does not exist")

makePath(pn)

Code

Makes the path pn including any missing parent directories. Does nothing if path pn already exists.

Returns: None

dn = "/home/chris/appdir/subdir"
FT.makePath(dn)

Metadata

Release files for ccautils 0.4.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ccautils 0.4.2
File Size Uploaded Provenance
ccautils-0.4.2.tar.gz 23.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for ccautils 0.4.2
File Interpreter ABI Platform
ccautils-0.4.2-py3-none-any.whl Python 3 none any Details

Total release size: 45.8 kB

Release files / ccautils-0.4.2.tar.gz

Download URL ccautils-0.4.2.tar.gz
Size 23.6 kB
Tags Source
SHA-256 checksum
How to use checksums
f0b1beb3c7d74a75ad89591e96ce20c67fe5775c9433725837e2f54221630a40
BLAKE2b-256 checksum
How to use checksums
6265c576cf8447aa6dee55740bcefbea552f9ad5ace4610293e68e38660a4e86
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.0.0 CPython/3.8.1 Linux/5.5.7-1-MANJARO

Release files / ccautils-0.4.2-py3-none-any.whl

Download URL ccautils-0.4.2-py3-none-any.whl
Size 22.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d2a88c3122bab91ac055b35bfae89f6ac226a3796ad00f79a0a6d4a69cfce126
BLAKE2b-256 checksum
How to use checksums
61eb2093ceffd9a0d06c912c18c4f555e1937a37540a35e892cd304e6c78292e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.0.0 CPython/3.8.1 Linux/5.5.7-1-MANJARO

Security for ccautils 0.4.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page