i guess it works

This commit is contained in:
2025-10-14 21:31:05 +02:00
parent d5dcd35696
commit 1c47c68c11
2 changed files with 147 additions and 87 deletions

View File

@@ -1,54 +1,50 @@
import json import json
import os import os
import argparse import argparse
import sys
# TODO: # ======================================================================
# - argparser with input file as required -> default output without # Constantes
# args is version
# - `--patch`,'--minor' and '--major' raise the version numbers by
# one respectively
# - add a check for the input path if a file with the name
# 'version.json' exists, if not it asks for user input and creates
# one. if a file exists it opens the file and continues with either
# the given flag or returning the version read from the file.
# - create functions to raise versions
# - add an path as input for the create_version_file function
# Path to the file containing the version which to edit.
FILE_PATH = os.path.expanduser("~/Documents/git/python/pyvers/src/version.json")
FILE_NAME = "version.json" FILE_NAME = "version.json"
# ======================================================================
# ======================================================================
# Parser
parser = argparse.ArgumentParser(
prog="pyvers",
description="xD",
)
parser.add_argument(
"config",
help="The location of the config file to edit.",
type=str,
)
parser.add_argument(
"--patch",
help="Bumps the patch version by one.",
action="store_true",
)
parser.add_argument(
"--minor",
help="Bumps the minor version by one.",
action="store_true",
)
parser.add_argument(
"--major",
help="Bumps the major version by one.",
action="store_true",
)
args = parser.parse_args()
# ======================================================================
def check_for_file(input_path: str): # ======================================================================
"""Checks if the file 'version.json' exists at the given path. # Functions
Args:
input_path ( str ): Path to check for the file.
Example:
>>>check_for_file(".")
'False'
>>>check_for_file("version.json")
'True'
>>>check_for_file("./version.json")
'True'
"""
if FILE_NAME in input_path:
file_path = os.path.expanduser(input_path)
if os.path.exists(file_path):
print("True1")
return True
else:
print("False")
return False
elif os.path.exists(os.path.join(input_path, FILE_NAME)):
return True
else:
return False
def create_version_file(file_path) -> None: def create_version_file(file_path) -> None:
"""Creates a version.json file with all versions set to 0. """Creates a version.json file with all versions set to 0 at the
input location.
Args: Args:
file_path: (str): Path with file name. file_path: (str): Path with file name.
@@ -74,64 +70,133 @@ def create_version_file(file_path) -> None:
def load_version(input_path) -> dict[str, int]: def load_version(input_path) -> dict[str, int]:
"""Opens the given file and returns its contents.""" """Opens the given file and returns its contents."""
# Open given path and loading the files contents into a variable
file_path = open(input_path) file_path = open(input_path)
prog_version = json.load(file_path) prog_version = json.load(file_path)
return prog_version return prog_version
# print(load_version()) def bump_patch(version_file) -> None:
"""Bumps the patch number of the given file by one."""
# Get the version as dictionary
version = load_version(version_file)
# Adding one to the version from the file and updating
# the dictionary
new_version = version["patch"] + 1
version.update({"patch": new_version})
# Opening the file and overwriting its contents.
with open(version_file, "w") as f:
f.write(json.dumps(version, indent=4))
# def update_patch() -> None: def bump_minor(version_file) -> None:
# version = load_version(args.config) """Bumps the minor version number of the given file by one."""
# # Get the version as dictionary
# new_version = version["patch"] + 1 version = load_version(version_file)
#
# version.update({"patch": new_version}) # Adding one to the version from the file and updating
# print(version) # the dictionary
# with open(FILE_PATH, "w") as f: new_version = version["minor"] + 1
# f.write(json.dumps(version, indent=4)) version.update({"minor": new_version})
#
# # Opening the file and overwriting its contents.
# def update_minor() -> None: with open(version_file, "w") as f:
# version = load_version() f.write(json.dumps(version, indent=4))
#
# new_version = version["minor"] + 1
#
# version.update({"minor": new_version})
# print(version)
# with open(FILE_PATH, "w") as f:
# f.write(json.dumps(version, indent=4))
parser = argparse.ArgumentParser( def bump_major(version_file) -> None:
prog="pyvers", """Bumps the major version number of the given file by one."""
description="xD", # Get the version as dictionary
) version = load_version(version_file)
parser.add_argument( # Adding one to the version from the file and updating
"config", # the dictionary
help="The config file which to edit.", new_version = version["major"] + 1
type=str, version.update({"major": new_version})
)
args = parser.parse_args() # Opening the file and overwriting its contents.
with open(version_file, "w") as f:
f.write(json.dumps(version, indent=4))
# Dispatching def version_bumper(version_file, major_version, minor_version, patch) -> None:
"""Decides what version to bump, based on the users passed flags"""
if patch:
bump_patch(version_file)
if minor_version:
bump_minor(version_file)
if major_version:
bump_major(version_file)
def check_for_file(input_path: str) -> bool:
"""Checks if the file 'version.json' exists at the given path.
Args:
input_path ( str ): Path to check for the file.
Example:
>>>check_for_file(".")
'False'
>>>check_for_file("version.json")
'True'
>>>check_for_file("./version.json")
'True'
"""
if FILE_NAME in input_path:
file_path = os.path.expanduser(input_path)
if os.path.exists(file_path):
return True
else:
return False
elif os.path.exists(os.path.join(input_path, FILE_NAME)):
return True
else:
return False
def request_to_create():
"""Prompts the user if he wants to create the file and exits if the
user declines or presses any other character instead of 'y/Y'"""
# print(args.config)
print(check_for_file(args.config))
if check_for_file(args.config) is False:
PROMPT = "The file does not exist, do you want to create it? [y/n]" PROMPT = "The file does not exist, do you want to create it? [y/n]"
PROMPT += "\n>>>" PROMPT += "\n>>>"
response = input(PROMPT) response = input(PROMPT)
if "y" in response or "Y" in response: if "y" in response or "Y" in response:
file_path = os.path.join(os.path.expanduser(args.config), FILE_NAME) file_path = os.path.join(
os.path.expanduser(args.config),
FILE_NAME,
)
create_version_file(file_path) create_version_file(file_path)
return
else: else:
parser.print_help() parser.print_help()
sys.exit(1)
elif check_for_file(args.config):
file_path = os.path.join(args.config, FILE_NAME) # ======================================================================
print(load_version(file_path)) # Dispatching
if check_for_file(args.config):
file_path = os.path.join(os.path.expanduser(args.config), FILE_NAME)
if args.patch or args.minor or args.major:
version_bumper(
version_file=file_path,
major_version=args.major,
minor_version=args.minor,
patch=args.patch,
)
else:
print(load_version(file_path))
if check_for_file(args.config) is False:
request_to_create()
file_path = os.path.join(os.path.expanduser(args.config), FILE_NAME)
version_bumper(
version_file=file_path,
major_version=args.major,
minor_version=args.minor,
patch=args.patch,
)

View File

@@ -1,5 +0,0 @@
{
"minor": 6,
"major": 0,
"patch": 7
}