Untitled
unknown
plain_text
19 days ago
4.2 kB
3
Indexable
event_mock = {
'feed_list': [
{
'path': 'global/enhanced_index_stars_full_ed_jones_isin_change.yaml' # Required
# 'extra_filters': [ # Optional
# 'bluematrix_id == 24228',
# ],
},
],
}
- archive_entries.reason == ISIN change
- archive_entries.tradingitem_id == 2598323
- actual_from == {prev_date}
- reason != ISIN change
- OR:
- reason == Drop Coverage
- reason == Ticker/Exchange change
@cached_property
def _previous_day_isin_archive_entry_cached(self):
day_mapping = {
'Monday': 5,
'Tuesday': 4,
'Wednesday': 3,
'Thursday': 2,
'Friday': 1,
'Saturday': 0,
'Sunday': 6
}
if not self.archive_entries:
return None
today = datetime.date.today()
yesterday = datetime.date.today() - datetime.timedelta(days=1)
print(f"STATUS: Today's date is {today}, yesterday's date is {yesterday}")
prev_day_entries = []
# sorted_entries = sorted(
# self.archive_entries,
# key=lambda x: x.actual_from,
# reverse=True
# )
priority_order = {
'Drop Coverage': 3,
'ISIN change': 2,
'Ticker/Exchange change': 1
}
sorted_entries = sorted(
self.archive_entries,
key=lambda x: (
x.actual_from or datetime.min,
priority_order.get(
getattr(x, 'reason', ''),
0
)
),
reverse=True
)
if sorted_entries[0].reason in ALLOWED_ARCHIVE_REASONS and sorted_entries[0].actual_from == yesterday:
prev_day_entries.append(sorted_entries[0])
elif sorted_entries[0].reason == ISIN_CHANGE_REASON:
entry = sorted_entries[0]
print(f"STATUS: Found ISIN_CHANGE_REASON entry {entry.reason} and actual_from: {entry.actual_from} for {entry.tradingitem_id}")
actual_from = sorted_entries[0].actual_from
# if string convert
if isinstance(actual_from, str):
print(f"STATUS: Converting string date {actual_from} to date object for {entry.tradingitem_id}")
actual_from = datetime.datetime.strptime(
actual_from, "%Y-%m-%d"
).date()
else:
print(f"STATUS: actual_from is already a date object: {actual_from} for {entry.tradingitem_id}")
day_name = actual_from.strftime("%A")
print(f"STATUS: Day name for {actual_from} is {day_name} for {entry.tradingitem_id}")
expiry_date = actual_from + datetime.timedelta(
days=day_mapping[day_name]
)
print(f"STATUS: Calculated expiry_date: {expiry_date} (adding {day_mapping[day_name]} days) for {entry.tradingitem_id}")
if today <= expiry_date:
print(f"STATUS: Today ({today}) is within expiry date ({expiry_date}), adding entry to list for {entry.tradingitem_id}")
print(f"STATUS: Found entry with actual_from equal to yesterday ({yesterday}) for {entry.tradingitem_id}, adding entry to list")
prev_day_entries.append(sorted_entries[0])
else:
print(f"STATUS: Today ({today}) is after expiry date ({expiry_date}), skipping entry for {entry.tradingitem_id}")
print(f"STATUS: Found {len(prev_day_entries)} valid entries before sorting")
print(f"STATUS: Sorted {len(prev_day_entries)} entries by actual_from (descending)")
print(f"STATUS: Returning entry with actual_from: {prev_day_entries[0].actual_from} and reason: {prev_day_entries[0].reason} for {prev_day_entries[0].tradingitem_id}" if prev_day_entries else "STATUS: No valid entries found, returning None")
return prev_day_entries[0] if prev_day_entries else None
Editor is loading...
Leave a Comment