Repository: yt-dlp/yt-dlp
File: yt_dlp/extractor/tvo.py (Python)

Code before:
                    description
                    length
                    program {
                      nodeUrl
                      title
                    }
                    programOrder
                    publishedAt
                    season
                    tags
                    thumbnail
                    title
                    videoSource {
                      brightcoveRefId
                    }
                  }
                }''',
            }, separators=(',', ':')).encode(),
        )['data']['getTVOOrgVideo']

        brightcove_id = traverse_obj(video_data, (
            'videoSource', 'brightcoveRefId', {str_or_none}, {require('Brightcove ID')}))

        return {
            '_type': 'url_transparent',
            'ie_key': 'BrightcoveNew',
            'url': smuggle_url(self.BRIGHTCOVE_URL_TEMPLATE % brightcove_id, {'geo_countries': ['CA']}),
            'display_id': display_id,
            'episode_id': display_id,
            **traverse_obj(video_data, {
                'title': ('title', {clean_html}, filter),
                'categories': ('contentCategory', {clean_html}, filter, all, filter),
                'description': ('description', {clean_html}, filter),
                'duration': ('length', {parse_duration}),
                'episode': ('title', {clean_html}, filter),
                'episode_number': ('programOrder', {int_or_none}),
                'season_number': ('season', {int_or_none}),
                'tags': ('tags', ..., {clean_html}, filter),
                'thumbnail': ('thumbnail', {url_or_none}),
                'timestamp': ('publishedAt', {parse_iso8601}),
            }),
            **traverse_obj(video_data, ('program', {
                'series': ('title', {clean_html}, filter),
                'series_id': ('nodeUrl', {clean_html}, {trim_str(start='/programs/')}, filter),
            })),
        }


Review comment (suggestion):
nitpick: I would import and do this
```suggestion
            'ie_key': BrightcoveNewIE.ie_key(),
```

otherwise LGTM

Code after:
                  getTVOOrgVideo(slug: $slug) {
                    contentCategory
                    description
                    length
                    program {
                      nodeUrl
                      title
                    }
                    programOrder
                    publishedAt
                    season
                    tags
                    thumbnail
                    title
                    videoSource {
                      brightcoveRefId
                    }
                  }
                }''',
            }, separators=(',', ':')).encode(),
        )['data']['getTVOOrgVideo']

        brightcove_id = traverse_obj(video_data, (
            'videoSource', 'brightcoveRefId', {str_or_none}, {require('Brightcove ID')}))

        return {
            '_type': 'url_transparent',
            'ie_key': BrightcoveNewIE.ie_key(),
            'url': smuggle_url(self.BRIGHTCOVE_URL_TEMPLATE % brightcove_id, {'geo_countries': ['CA']}),
            'display_id': display_id,
            'episode_id': display_id,
            **traverse_obj(video_data, {
                'title': ('title', {clean_html}, filter),
                'categories': ('contentCategory', {clean_html}, filter, all, filter),
                'description': ('description', {clean_html}, filter),
                'duration': ('length', {parse_duration}),
                'episode': ('title', {clean_html}, filter),
                'episode_number': ('programOrder', {int_or_none}),
                'season_number': ('season', {int_or_none}),
                'tags': ('tags', ..., {clean_html}, filter),
                'thumbnail': ('thumbnail', {url_or_none}),
                'timestamp': ('publishedAt', {parse_iso8601}),
            }),
            **traverse_obj(video_data, ('program', {
                'series': ('title', {clean_html}, filter),
                'series_id': ('nodeUrl', {clean_html}, {trim_str(start='/programs/')}, filter),
            })),
        }