Skip to content

Commit a322e37

Browse files
committed
release
1 parent f28c60e commit a322e37

File tree

5 files changed

+37
-4
lines changed

5 files changed

+37
-4
lines changed

ccy/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Python currencies"""
22

3-
__version__ = "1.7.0"
3+
__version__ = "1.7.1"
44

55

66
from .core.country import (

ccy/core/daycounter.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from copy import copy
1313
from datetime import date
1414
from typing import Any
15+
from ..dates.utils import date_diff
1516

1617
__all__ = ["getdc", "DayCounter", "alldc"]
1718

@@ -41,7 +42,7 @@ class DayCounter(metaclass=DayCounterMeta):
4142

4243
def count(self, start: date, end: date) -> float:
4344
"""Count the number of days between 2 dates"""
44-
return (end - start).total_seconds() / 86400
45+
return date_diff(end, start).total_seconds() / 86400
4546

4647
def dcf(self, start: date, end: date) -> float:
4748
return self.count(start, end) / 360.0
@@ -76,5 +77,5 @@ def dcf(self, start: date, end: date) -> float:
7677
def act_act_years(self, dt: date) -> float:
7778
y = dt.year
7879
days_in_year = 365 if y % 4 else 366
79-
dd = (dt - date(y, 1, 1)).total_seconds() / 86400
80+
dd = date_diff(dt, date(y, 1, 1)).total_seconds() / 86400
8081
return y + dd / days_in_year

ccy/dates/utils.py

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from datetime import date, datetime, timezone, timedelta
2+
3+
4+
def utcnow() -> datetime:
5+
return datetime.now(timezone.utc)
6+
7+
8+
def as_utc(dt: date | None = None) -> datetime:
9+
if dt is None:
10+
return utcnow()
11+
elif isinstance(dt, datetime):
12+
return dt.astimezone(timezone.utc)
13+
else:
14+
return datetime(dt.year, dt.month, dt.day, tzinfo=timezone.utc)
15+
16+
17+
def date_diff(a: date, b: date) -> timedelta:
18+
if isinstance(a, datetime) or isinstance(b, datetime):
19+
return as_utc(a) - as_utc(b)
20+
return a - b

pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "ccy"
3-
version = "1.7.0"
3+
version = "1.7.1"
44
description = "Python currencies"
55
authors = ["Luca Sbardella <[email protected]>"]
66
license = "BSD"

tests/test_dc.py

+12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import pytest
44

5+
from ccy.dates.utils import utcnow
56
import ccy
67

78

@@ -18,3 +19,14 @@ def test_getdb():
1819

1920
with pytest.raises(KeyError):
2021
ccy.getdc("kaputt")
22+
23+
24+
def test_with_datetime():
25+
for name in ("ACT/365", "ACT/ACT", "ACT/360"):
26+
dc = ccy.getdc(name)
27+
start = utcnow()
28+
dc1 = dc.dcf(start, start.date() + timedelta(days=1))
29+
dc2 = dc.dcf(start, start + timedelta(days=1))
30+
assert dc1 > 0
31+
assert dc2 > 0
32+
assert dc1 < dc2, f"{name}"

0 commit comments

Comments
 (0)