Every video carries a random number drawn once (videos.shuffle_key, migration 0118, indexed with id). A seed picks a point on that ring: the feed's Shuffle sort pages along it and wraps, and the Home surprise reads a 500-video window of it and shuffles that window by the seed, so no video is favoured for sitting after a wide gap. The md5(id || seed) order read and sorted the whole feed scope on every call: ~350 ms on prod per surprise, 381-767 ms per Shuffle page on localdev, now 14 ms and 4 ms.
780 lines
22 KiB
JSON
780 lines
22 KiB
JSON
{
|
|
"files": {
|
|
"./app/audit.py": [
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 18,
|
|
"endColumn": 26,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/debugsession.py": [
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 18,
|
|
"endColumn": 26,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 18,
|
|
"endColumn": 26,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/diagnostics.py": [
|
|
{
|
|
"code": "reportOptionalMemberAccess",
|
|
"range": {
|
|
"startColumn": 40,
|
|
"endColumn": 49,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/discover/pins.py": [
|
|
{
|
|
"code": "reportOptionalOperand",
|
|
"range": {
|
|
"startColumn": 8,
|
|
"endColumn": 9,
|
|
"lineCount": 5
|
|
}
|
|
}
|
|
],
|
|
"./app/discover/queries.py": [
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 50,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 33,
|
|
"endColumn": 44,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 33,
|
|
"endColumn": 44,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 33,
|
|
"endColumn": 44,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 28,
|
|
"endColumn": 39,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 28,
|
|
"endColumn": 39,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 28,
|
|
"endColumn": 39,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/discover/rails.py": [
|
|
{
|
|
"code": "reportCallIssue",
|
|
"range": {
|
|
"startColumn": 4,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 18,
|
|
"endColumn": 41,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/downloads/backfill.py": [
|
|
{
|
|
"code": "reportReturnType",
|
|
"range": {
|
|
"startColumn": 23,
|
|
"endColumn": 27,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/downloads/credentials.py": [
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 27,
|
|
"endColumn": 30,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/downloads/gc.py": [
|
|
{
|
|
"code": "reportOperatorIssue",
|
|
"range": {
|
|
"startColumn": 16,
|
|
"endColumn": 28,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/downloads/pipeline.py": [
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 22,
|
|
"endColumn": 27,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportGeneralTypeIssues",
|
|
"range": {
|
|
"startColumn": 10,
|
|
"endColumn": 18,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 31,
|
|
"endColumn": 36,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 36,
|
|
"endColumn": 43,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/downloads/service.py": [
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 18,
|
|
"endColumn": 26,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/downloads/urlguard.py": [
|
|
{
|
|
"code": "reportReturnType",
|
|
"range": {
|
|
"startColumn": 11,
|
|
"endColumn": 41,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/feedquery.py": [
|
|
{
|
|
"code": "reportCallIssue",
|
|
"range": {
|
|
"startColumn": 37,
|
|
"endColumn": 5,
|
|
"lineCount": 3
|
|
}
|
|
},
|
|
{
|
|
"code": "reportAssignmentType",
|
|
"range": {
|
|
"startColumn": 37,
|
|
"endColumn": 5,
|
|
"lineCount": 3
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 8,
|
|
"endColumn": 97,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/logsink.py": [
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 18,
|
|
"endColumn": 26,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/notifications.py": [
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 52,
|
|
"endColumn": 58,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/plex/lookups.py": [
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 48,
|
|
"endColumn": 58,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/plex/people.py": [
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 15,
|
|
"endColumn": 23,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/plex/sync.py": [
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 21,
|
|
"endColumn": 69,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 21,
|
|
"endColumn": 69,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 70,
|
|
"endColumn": 83,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 76,
|
|
"endColumn": 89,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/plex/tmdb.py": [
|
|
{
|
|
"code": "reportAssignmentType",
|
|
"range": {
|
|
"startColumn": 16,
|
|
"endColumn": 9,
|
|
"lineCount": 10
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 30,
|
|
"endColumn": 36,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 29,
|
|
"endColumn": 35,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/plex/watch_sync.py": [
|
|
{
|
|
"code": "reportReturnType",
|
|
"range": {
|
|
"startColumn": 11,
|
|
"endColumn": 5,
|
|
"lineCount": 11
|
|
}
|
|
}
|
|
],
|
|
"./app/ratelimit.py": [
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 14,
|
|
"endColumn": 25,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/routes/admin.py": [
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 9,
|
|
"endColumn": 13,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/routes/audit.py": [
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 37,
|
|
"endColumn": 45,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/routes/discover.py": [
|
|
{
|
|
"code": "reportInvalidTypeForm",
|
|
"range": {
|
|
"startColumn": 19,
|
|
"endColumn": 33,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/routes/plex/collections.py": [
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 20,
|
|
"endColumn": 45,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 20,
|
|
"endColumn": 46,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 56,
|
|
"endColumn": 59,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 56,
|
|
"endColumn": 59,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportOptionalMemberAccess",
|
|
"range": {
|
|
"startColumn": 39,
|
|
"endColumn": 47,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 56,
|
|
"endColumn": 59,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 46,
|
|
"endColumn": 49,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/routes/scheduler.py": [
|
|
{
|
|
"code": "reportOptionalMemberAccess",
|
|
"range": {
|
|
"startColumn": 25,
|
|
"endColumn": 28,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportOptionalMemberAccess",
|
|
"range": {
|
|
"startColumn": 25,
|
|
"endColumn": 28,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/sync/explore.py": [
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 6,
|
|
"endColumn": 14,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 6,
|
|
"endColumn": 14,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 6,
|
|
"endColumn": 14,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 6,
|
|
"endColumn": 14,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/sync/maintenance.py": [
|
|
{
|
|
"code": "reportOptionalOperand",
|
|
"range": {
|
|
"startColumn": 19,
|
|
"endColumn": 42,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/sync/playlists.py": [
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 55,
|
|
"endColumn": 72,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 51,
|
|
"endColumn": 68,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 39,
|
|
"endColumn": 56,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/sync/runner.py": [
|
|
{
|
|
"code": "reportAssignmentType",
|
|
"range": {
|
|
"startColumn": 19,
|
|
"endColumn": 88,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 16,
|
|
"endColumn": 24,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportOptionalIterable",
|
|
"range": {
|
|
"startColumn": 23,
|
|
"endColumn": 31,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 45,
|
|
"endColumn": 72,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportAssignmentType",
|
|
"range": {
|
|
"startColumn": 19,
|
|
"endColumn": 9,
|
|
"lineCount": 7
|
|
}
|
|
},
|
|
{
|
|
"code": "reportOptionalSubscript",
|
|
"range": {
|
|
"startColumn": 19,
|
|
"endColumn": 27,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportOptionalIterable",
|
|
"range": {
|
|
"startColumn": 23,
|
|
"endColumn": 31,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 47,
|
|
"endColumn": 55,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/sync/videos.py": [
|
|
{
|
|
"code": "reportAttributeAccessIssue",
|
|
"range": {
|
|
"startColumn": 18,
|
|
"endColumn": 26,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
],
|
|
"./app/worker.py": [
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 36,
|
|
"endColumn": 40,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 36,
|
|
"endColumn": 40,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 35,
|
|
"endColumn": 43,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 24,
|
|
"endColumn": 32,
|
|
"lineCount": 1
|
|
}
|
|
},
|
|
{
|
|
"code": "reportArgumentType",
|
|
"range": {
|
|
"startColumn": 28,
|
|
"endColumn": 36,
|
|
"lineCount": 1
|
|
}
|
|
}
|
|
]
|
|
}
|
|
} |