opendate 0.1.8__tar.gz → 0.1.10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of opendate might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: opendate
3
- Version: 0.1.8
3
+ Version: 0.1.10
4
4
  Summary: Python business datetimes
5
5
  Home-page: https://github.com/bissli/opendate
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "opendate"
3
- version = "0.1.8"
3
+ version = "0.1.10"
4
4
  description = "Python business datetimes"
5
5
  authors = ["bissli <bissli.xyz@protonmail.com>"]
6
6
  readme = "README.md"
@@ -1,4 +1,4 @@
1
- __version__ = '0.1.8'
1
+ __version__ = '0.1.10'
2
2
 
3
3
  import datetime as _datetime
4
4
 
@@ -272,20 +272,22 @@ class NYSE(Entity):
272
272
  @staticmethod
273
273
  @lru_cache
274
274
  def business_days(begdate=BEGDATE, enddate=ENDDATE) -> set:
275
- return {d.date() for d in NYSE.calendar.valid_days(begdate, enddate)}
275
+ return {Date.instance(d.date())
276
+ for d in NYSE.calendar.valid_days(begdate, enddate)}
276
277
 
277
278
  @staticmethod
278
279
  @lru_cache
279
280
  def business_hours(begdate=BEGDATE, enddate=ENDDATE) -> dict:
280
281
  df = NYSE.calendar.schedule(begdate, enddate, tz=EST)
281
- open_close = [(o.to_pydatetime(), c.to_pydatetime())
282
+ open_close = [(DateTime.instance(o.to_pydatetime()),
283
+ DateTime.instance(c.to_pydatetime()))
282
284
  for o, c in zip(df.market_open, df.market_close)]
283
285
  return dict(zip(df.index.date, open_close))
284
286
 
285
287
  @staticmethod
286
288
  @lru_cache
287
289
  def business_holidays(begdate=BEGDATE, enddate=ENDDATE) -> set:
288
- return {d.date()
290
+ return {Date.instance(d.date())
289
291
  for d in map(pd.to_datetime, NYSE.calendar.holidays().holidays)
290
292
  if begdate <= d <= enddate}
291
293
 
@@ -1354,12 +1356,29 @@ class Interval:
1354
1356
  set - set end=beg + num
1355
1357
  - set set beg=end - num
1356
1358
 
1357
- >>> Interval('4/3/2014', None).b.range(3)
1359
+ Basic/legacy cases
1360
+ >>> Interval(Date(2014, 4, 3), None).b.range(3)
1358
1361
  (Date(2014, 4, 3), Date(2014, 4, 8))
1359
1362
  >>> Interval(None, Date(2014, 7, 27)).range(20)
1360
1363
  (Date(2014, 7, 7), Date(2014, 7, 27))
1361
- >>> Interval(None, '2014/7/27').b.range(20)
1364
+ >>> Interval(None, Date(2014, 7, 27)).b.range(20)
1362
1365
  (Date(2014, 6, 27), Date(2014, 7, 27))
1366
+
1367
+ Do not modify dates if both are provided
1368
+ >>> Interval(Date(2024, 7, 25), Date(2024, 7, 25)).b.range(None)
1369
+ (Date(2024, 7, 25), Date(2024, 7, 25))
1370
+ >>> Interval(Date(2024, 7, 27), Date(2024, 7, 27)).b.range(None)
1371
+ (Date(2024, 7, 27), Date(2024, 7, 27))
1372
+
1373
+ Edge cases (7/27/24 is weekend)
1374
+ >>> Interval(Date(2024, 7, 27), None).b.range(0)
1375
+ (Date(2024, 7, 27), Date(2024, 7, 27))
1376
+ >>> Interval(None, Date(2024, 7, 27)).b.range(0)
1377
+ (Date(2024, 7, 27), Date(2024, 7, 27))
1378
+ >>> Interval(Date(2024, 7, 27), None).b.range(1)
1379
+ (Date(2024, 7, 27), Date(2024, 7, 29))
1380
+ >>> Interval(None, Date(2024, 7, 27)).b.range(1)
1381
+ (Date(2024, 7, 26), Date(2024, 7, 27))
1363
1382
  """
1364
1383
  begdate, enddate = self.begdate, self.enddate
1365
1384
 
@@ -1373,17 +1392,14 @@ class Interval:
1373
1392
  raise IntervalError('Missing begdate and enddate, window specified')
1374
1393
 
1375
1394
  if begdate and enddate:
1376
- return (begdate.business() if begdate._business else
1377
- begdate).add(days=window), \
1378
- (enddate.business() if enddate._business else
1379
- enddate).subtract(days=0)
1380
-
1381
- if (not begdate and not enddate) or enddate:
1382
- begdate = (enddate.business() if enddate._business else
1383
- enddate).subtract(days=window)
1395
+ pass # do nothing if both provided
1396
+ elif (not begdate and not enddate) or enddate:
1397
+ begdate = enddate.subtract(days=window) if window else enddate
1384
1398
  else:
1385
- enddate = (begdate.business() if begdate._business else
1386
- begdate).add(days=window)
1399
+ enddate = begdate.add(days=window) if window else begdate
1400
+
1401
+ enddate._business = False
1402
+ begdate._business = False
1387
1403
 
1388
1404
  return begdate, enddate
1389
1405
 
File without changes
File without changes
File without changes