Browse Source

Added rudimentary relative date functionality

pull/75/head
brain_face 6 years ago
parent
commit
a0af6eee27
3 changed files with 27 additions and 7 deletions
  1. +1
    -0
      Pipfile
  2. +0
    -0
      kosmorro
  3. +26
    -7
      kosmorrolib/main.py

+ 1
- 0
Pipfile View File

@@ -16,6 +16,7 @@ tabulate = "*"
numpy = ">=1.17.0,<2.0.0" numpy = ">=1.17.0,<2.0.0"
termcolor = "*" termcolor = "*"
latex = "*" latex = "*"
dateutil = ">=2.8.1"


[requires] [requires]
python_version = "3" python_version = "3"

+ 0
- 0
kosmorro View File


+ 26
- 7
kosmorrolib/main.py View File

@@ -22,6 +22,7 @@ import re
import sys import sys


from datetime import date from datetime import date
from dateutil.relativedelta import relativedelta
from termcolor import colored from termcolor import colored


from kosmorrolib.version import VERSION from kosmorrolib.version import VERSION
@@ -99,14 +100,32 @@ def main():
return 0 return 0




def get_date(yyyymmdd: str) -> date:
if not re.match(r'^\d{4}-\d{2}-\d{2}$', yyyymmdd):
raise ValueError(_('The date {date} does not match the required YYYY-MM-DD format.').format(date=yyyymmdd))
def get_date(date_arg: str) -> date:
if re.match(r'^\d{4}-\d{2}-\d{2}$', date_arg):
try:
return date.fromisoformat(date_arg)
except ValueError as error:
raise ValueError(_('The date {date} is not valid: {error}').format(date=date_arg, error=error.args[0]))
elif re.match(r'^([+-])(([0-9]+)y)?[ ]?(([0-9]+)m)?[ ]?(([0-9]+)d)?$', date_arg):
def get_offset(date_arg: str, signifier: str):
if re.search(r'([0-9]+)' + signifier, date_arg):
return int(re.search(r'[+-]?([0-9]+)' + signifier, date_arg).group(0)[:-1])
else:
return 0

days = get_offset(date_arg, 'd')
months = get_offset(date_arg, 'm')
years = get_offset(date_arg, 'y')


if date_arg[0] == '+':
return date.today() + relativedelta(days=days, months=months, years=years)
else:
return date.today() - relativedelta(days=days, months=months, years=years)

else:
raise ValueError(_('The date {date} does not match the required YYYY-MM-DD format or the offset format.').format(date=date_arg))


try:
return date.fromisoformat(yyyymmdd)
except ValueError as error:
raise ValueError(_('The date {date} is not valid: {error}').format(date=yyyymmdd, error=error.args[0]))




def get_dumpers() -> {str: dumper.Dumper}: def get_dumpers() -> {str: dumper.Dumper}:


Loading…
Cancel
Save