Untitled

 avatar
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