Compare commits
525 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
711482d59a | ||
|
|
694c7cec10 | ||
|
|
bb76f01c05 | ||
|
|
3382cabe25 | ||
|
|
c06893f3e0 | ||
|
|
5c97b4baae | ||
|
|
cd0c43fb3a | ||
|
|
0a312cc912 | ||
|
|
0dc44c94b3 | ||
|
|
ce79ccaec2 | ||
|
|
9c313cdac3 | ||
|
|
ed22f5cd01 | ||
|
|
98d3ed7d91 | ||
|
|
584a4f258e | ||
|
|
7a61ecff7b | ||
|
|
58bbb5fe6f | ||
|
|
ee650820a9 | ||
|
|
fb38a5a814 | ||
|
|
3406234e00 | ||
|
|
9ba76b56d7 | ||
|
|
f3d02e07ea | ||
|
|
a115a1ed6b | ||
|
|
d83ff6a121 | ||
|
|
f6e2881f2f | ||
|
|
6c493e8329 | ||
|
|
e749925c0a | ||
|
|
f0b61e3bd9 | ||
|
|
83f76dbdce | ||
|
|
4adb7b49ba | ||
|
|
2d6c238ea0 | ||
|
|
e584026bda | ||
|
|
1b52928e1a | ||
|
|
38c1bff9dc | ||
|
|
08af182380 | ||
|
|
1ee805901f | ||
|
|
a98760f4d9 | ||
|
|
fc06493990 | ||
|
|
1bc4e531ae | ||
|
|
abceb8205c | ||
|
|
5bfcdaf4ff | ||
|
|
ad8a652183 | ||
|
|
76a9e98ba7 | ||
|
|
42e14f99b0 | ||
|
|
b1295047e2 | ||
|
|
7c18b5126e | ||
|
|
b792401e07 | ||
|
|
80a5e491ed | ||
|
|
635fd4de73 | ||
|
|
a08951ab56 | ||
|
|
1a746e965e | ||
|
|
8cbdef3949 | ||
|
|
569576d4e8 | ||
|
|
b0b5af8e21 | ||
|
|
cf15409973 | ||
|
|
1f2c1bfe0b | ||
|
|
8cad607d98 | ||
|
|
1dcda5613a | ||
|
|
31ec0018be | ||
|
|
86049ca679 | ||
|
|
9dc1118d79 | ||
|
|
6fcc93cab8 | ||
|
|
379e2c3714 | ||
|
|
3cbb32fec6 | ||
|
|
29ead0f7d9 | ||
|
|
7022a5c572 | ||
|
|
7ba7d5de13 | ||
|
|
007006feb2 | ||
|
|
b4b21604da | ||
|
|
688b09b95e | ||
|
|
e894c40ff4 | ||
|
|
a23a749c59 | ||
|
|
2d8f1b60a3 | ||
|
|
8c03e65104 | ||
|
|
764d80e818 | ||
|
|
854c236a60 | ||
|
|
4b1b343a8f | ||
|
|
65f04bff63 | ||
|
|
8055856137 | ||
|
|
17a79976dd | ||
|
|
38062d0bee | ||
|
|
2ce252059e | ||
|
|
c7ee946871 | ||
|
|
3afcbb759c | ||
|
|
bc18202736 | ||
|
|
a0973a2ad8 | ||
|
|
c18ab3f91f | ||
|
|
9718595017 | ||
|
|
5f803f346b | ||
|
|
0320830725 | ||
|
|
9dd744254a | ||
|
|
67b6a6fd68 | ||
|
|
ca62fd714f | ||
|
|
49346f9a6d | ||
|
|
9200c9cab3 | ||
|
|
dbdb730b4d | ||
|
|
91211d5c86 | ||
|
|
d78c592d6a | ||
|
|
4771ec8b3b | ||
|
|
60f68ff2a3 | ||
|
|
c7634cbf3a | ||
|
|
96cd383436 | ||
|
|
e39dd1e0a3 | ||
|
|
7b1339631c | ||
|
|
0579b3b860 | ||
|
|
e7e76eea4c | ||
|
|
3f431a54d4 | ||
|
|
d0f8785936 | ||
|
|
7618eafaa6 | ||
|
|
f8f4539015 | ||
|
|
0ab978d543 | ||
|
|
c4a51d0f80 | ||
|
|
b20c3880b2 | ||
|
|
652461a819 | ||
|
|
691d39675d | ||
|
|
9bc0cd5629 | ||
|
|
625a501da5 | ||
|
|
28c2dcd2f7 | ||
|
|
c55511c099 | ||
|
|
b96f1e3957 | ||
|
|
fcbc67464d | ||
|
|
4b36937a55 | ||
|
|
8ead8ad893 | ||
|
|
515ae2c7e9 | ||
|
|
a5a9398c5c | ||
|
|
b82e904cb1 | ||
|
|
fbff65fbad | ||
|
|
19edd9ace0 | ||
|
|
0982ef78dd | ||
|
|
5695d8e017 | ||
|
|
06ad446925 | ||
|
|
6b5a9cdff7 | ||
|
|
efb66118e4 | ||
|
|
2444aa2fc9 | ||
|
|
93f6173efa | ||
|
|
dc81d48ab1 | ||
|
|
5c32be929e | ||
|
|
105f60f57e | ||
|
|
a52130cedb | ||
|
|
d08e7953f2 | ||
|
|
d7544b04dd | ||
|
|
0291540df4 | ||
|
|
27b9b0267b | ||
|
|
cffef0d161 | ||
|
|
b5cb71b68d | ||
|
|
7685586508 | ||
|
|
b8aaa56b4b | ||
|
|
4aa307c8dd | ||
|
|
12b99024a4 | ||
|
|
22f0e29315 | ||
|
|
6eeba92350 | ||
|
|
286ba2b044 | ||
|
|
4b5a1e41d8 | ||
|
|
008705b75c | ||
|
|
5937f968ef | ||
|
|
4fe5547bf8 | ||
|
|
96f6749516 | ||
|
|
bc3883df14 | ||
|
|
32b1b8020a | ||
|
|
9280295ed3 | ||
|
|
e5a29d4668 | ||
|
|
4cfaa5ca59 | ||
|
|
6f894a587b | ||
|
|
35eb9cbdb5 | ||
|
|
2d41c5ca31 | ||
|
|
14f7a8b502 | ||
|
|
5101795cbf | ||
|
|
6d0632acee | ||
|
|
9298eff554 | ||
|
|
335ab8cce0 | ||
|
|
32daced427 | ||
|
|
153edcc2e1 | ||
|
|
548bc00e00 | ||
|
|
f8ab022da9 | ||
|
|
cd80745dcb | ||
|
|
56dfbda40a | ||
|
|
591555c3c7 | ||
|
|
bbabad3135 | ||
|
|
3329822a46 | ||
|
|
413a1fa38c | ||
|
|
3ee7821353 | ||
|
|
20a816f3e6 | ||
|
|
457f9f9eb5 | ||
|
|
39519dbfff | ||
|
|
61a56560f3 | ||
|
|
c1ccd6f44a | ||
|
|
2123f78dad | ||
|
|
a1914980c8 | ||
|
|
a3dbc6a4a8 | ||
|
|
8a0fdb005d | ||
|
|
f13ad238eb | ||
|
|
92071237c1 | ||
|
|
52c2d61dcf | ||
|
|
73036c33cb | ||
|
|
d6eb7a778c | ||
|
|
62b50cc06f | ||
|
|
05bee6ce84 | ||
|
|
2c2d24c0a8 | ||
|
|
b252229e03 | ||
|
|
8f7aeee546 | ||
|
|
b7fa2f1df6 | ||
|
|
ba3b79dd72 | ||
|
|
e4e058ff97 | ||
|
|
0b42cec902 | ||
|
|
35ad842ba1 | ||
|
|
08cf4152f7 | ||
|
|
71a392737e | ||
|
|
2b93eafcdf | ||
|
|
3c1706d4e8 | ||
|
|
e4b3adb867 | ||
|
|
9f00124fad | ||
|
|
68416d0293 | ||
|
|
e63198dc49 | ||
|
|
a5ce721733 | ||
|
|
e3b65588a2 | ||
|
|
f13e9306c9 | ||
|
|
ef82610a06 | ||
|
|
18145edbf1 | ||
|
|
54635fee3c | ||
|
|
6152969340 | ||
|
|
8770e5a327 | ||
|
|
822d9909ed | ||
|
|
d179700c6c | ||
|
|
dfecc6f8a0 | ||
|
|
0d8d4084a9 | ||
|
|
6bc1039ed6 | ||
|
|
8e1b04550b | ||
|
|
33e1f05f77 | ||
|
|
c4113367f7 | ||
|
|
4b906b3a92 | ||
|
|
06d8360922 | ||
|
|
9d4082665a | ||
|
|
a3481f3674 | ||
|
|
e36d92340e | ||
|
|
6225189b3c | ||
|
|
6c658c23c4 | ||
|
|
30cf8ee2e8 | ||
|
|
2526c6097e | ||
|
|
1e0889fe84 | ||
|
|
ba0716d37e | ||
|
|
b8d9eb65f6 | ||
|
|
03f0a6e6e2 | ||
|
|
5971e4afa1 | ||
|
|
dc840b63d8 | ||
|
|
865b30c631 | ||
|
|
da17f214da | ||
|
|
643397c939 | ||
|
|
1704001ef6 | ||
|
|
18d6758dbe | ||
|
|
19f5b7e3bc | ||
|
|
28c81825cc | ||
|
|
151777fbd6 | ||
|
|
8a8e3c21cb | ||
|
|
809cb07bb8 | ||
|
|
edce5fae85 | ||
|
|
10c1342bdb | ||
|
|
ede82406fa | ||
|
|
6ff8d8b5af | ||
|
|
bd7d136504 | ||
|
|
f8ebcffa08 | ||
|
|
eed64334e3 | ||
|
|
2bee99f9cc | ||
|
|
35dcf76689 | ||
|
|
1f7285cfc4 | ||
|
|
4f1736fb0f | ||
|
|
0229567156 | ||
|
|
87daddbeb2 | ||
|
|
c284b9c26c | ||
|
|
95e3e4dda4 | ||
|
|
d95e6539e3 | ||
|
|
a49feb2971 | ||
|
|
8b7ae3beed | ||
|
|
0a0fbbbdbb | ||
|
|
ca44097669 | ||
|
|
c0c77f6762 | ||
|
|
b7ba899df7 | ||
|
|
9b4bf36dbb | ||
|
|
85d63243c7 | ||
|
|
79cbc46f9b | ||
|
|
bd9fe652d9 | ||
|
|
dac7b34228 | ||
|
|
8703c485bc | ||
|
|
29f36827ca | ||
|
|
6fdb2b55b5 | ||
|
|
6a2e5edf2e | ||
|
|
938c31c815 | ||
|
|
d0ead60421 | ||
|
|
e0883eeae2 | ||
|
|
b0941641c7 | ||
|
|
8654dd44e6 | ||
|
|
afb7e23fcc | ||
|
|
1ffe3e7c16 | ||
|
|
7c0934cd9b | ||
|
|
e5eef1320d | ||
|
|
5ec9b3ea6f | ||
|
|
708e993f41 | ||
|
|
fd68777484 | ||
|
|
d616dddac0 | ||
|
|
7b31c4cca5 | ||
|
|
be94e9fb6b | ||
|
|
1b9981d74e | ||
|
|
f1ad263849 | ||
|
|
d802adb048 | ||
|
|
71bb616b76 | ||
|
|
3ba0ec2041 | ||
|
|
40576ac18d | ||
|
|
e6fa83904b | ||
|
|
a52696aae2 | ||
|
|
e9ca9a0454 | ||
|
|
7d38bbb0fa | ||
|
|
512ffb7639 | ||
|
|
cc652472a0 | ||
|
|
4cc3b39ce6 | ||
|
|
fabb9bd611 | ||
|
|
436bdbd8f2 | ||
|
|
d6ca83f090 | ||
|
|
96de2e7d0f | ||
|
|
ec922fac2c | ||
|
|
b4d5aef876 | ||
|
|
a672abba6a | ||
|
|
b193e03be9 | ||
|
|
4088807c72 | ||
|
|
f02ed06e09 | ||
|
|
ac69569d77 | ||
|
|
13a2ef6e5e | ||
|
|
c490c5dca8 | ||
|
|
24204c581e | ||
|
|
881a46867d | ||
|
|
3c665c21d1 | ||
|
|
f95138d1a4 | ||
|
|
04009f78f7 | ||
|
|
45f449d371 | ||
|
|
d8e2de927a | ||
|
|
f67348b9b8 | ||
|
|
c92eaa93bd | ||
|
|
8411e4ff76 | ||
|
|
b451d5def8 | ||
|
|
a6f8237069 | ||
|
|
ceb6d5fdac | ||
|
|
41ed6b8a43 | ||
|
|
06a51b5799 | ||
|
|
5001e59ee3 | ||
|
|
85747edff1 | ||
|
|
fb4b950148 | ||
|
|
a2988557de | ||
|
|
f554e35686 | ||
|
|
dbcfbcd0f2 | ||
|
|
27b52466ad | ||
|
|
20082cbadf | ||
|
|
4a7138205c | ||
|
|
6ae4451c51 | ||
|
|
7f17d8cd8f | ||
|
|
0f6e3c9497 | ||
|
|
88078111b4 | ||
|
|
0601a9fda7 | ||
|
|
05d9f7c057 | ||
|
|
34903dd979 | ||
|
|
3ba317c4e4 | ||
|
|
6bbb4f5de8 | ||
|
|
4ab4d14a4e | ||
|
|
d9e5b9404d | ||
|
|
e5d4f3c9f0 | ||
|
|
46ba9b4c4a | ||
|
|
9b6231915a | ||
|
|
6d8e7abff7 | ||
|
|
932b263c5a | ||
|
|
aef8b3b6cc | ||
|
|
be50fb86d7 | ||
|
|
73d2248ccb | ||
|
|
48937855d4 | ||
|
|
802e596f06 | ||
|
|
b6751a94c2 | ||
|
|
8b0c71dbdf | ||
|
|
2f7fa481a3 | ||
|
|
ffc006bd99 | ||
|
|
ea74d388b0 | ||
|
|
d4bd8d66e8 | ||
|
|
3a81e16490 | ||
|
|
4ea2b9cc36 | ||
|
|
407ebc56d7 | ||
|
|
f9e3419f39 | ||
|
|
b03371d69a | ||
|
|
58251eefb7 | ||
|
|
74036ed6d9 | ||
|
|
bfa1234feb | ||
|
|
6535ce113a | ||
|
|
dd8d219e73 | ||
|
|
1576e730ea | ||
|
|
7fc158c914 | ||
|
|
f9588f47d0 | ||
|
|
2eaa158e80 | ||
|
|
3f05d9fcbc | ||
|
|
3d2b155b79 | ||
|
|
3df3b93348 | ||
|
|
790b483298 | ||
|
|
d80c1a93db | ||
|
|
e8d2408477 | ||
|
|
fcc8c10c2b | ||
|
|
3063840b6d | ||
|
|
a3c5f9a74f | ||
|
|
e85bebee12 | ||
|
|
30d416b822 | ||
|
|
e1a32b1466 | ||
|
|
d02d7445cd | ||
|
|
0785bcba93 | ||
|
|
9d01996ae6 | ||
|
|
8c705753df | ||
|
|
c7fc86e54d | ||
|
|
9eb65ec891 | ||
|
|
92891af6b6 | ||
|
|
c0d299892e | ||
|
|
9a63550a9b | ||
|
|
25506410d0 | ||
|
|
102c0eb795 | ||
|
|
4605cb5c39 | ||
|
|
f8bf76c150 | ||
|
|
977bd96241 | ||
|
|
5224c09faf | ||
|
|
f342bd9d3a | ||
|
|
5516a5f764 | ||
|
|
15fcd0a722 | ||
|
|
a867f767d9 | ||
|
|
e84640501d | ||
|
|
e627594989 | ||
|
|
7963ac77b9 | ||
|
|
fe6272bf3a | ||
|
|
7fc902dea1 | ||
|
|
e61ce4e4be | ||
|
|
18b0a9703e | ||
|
|
4994d8ac21 | ||
|
|
12dd1de858 | ||
|
|
d928fcd5d6 | ||
|
|
bb52bfdecb | ||
|
|
7f38aec32a | ||
|
|
af6b78a094 | ||
|
|
2d280a80fd | ||
|
|
0781b72c1d | ||
|
|
9280538e08 | ||
|
|
0b1ff3f9b6 | ||
|
|
3855b30d1b | ||
|
|
9dedfe0264 | ||
|
|
0d6e147df3 | ||
|
|
8bab8124cd | ||
|
|
b051288804 | ||
|
|
b4d2c34217 | ||
|
|
2af78a37d5 | ||
|
|
b5b18babe8 | ||
|
|
723b7ce190 | ||
|
|
6c02b9dc4a | ||
|
|
58bfdc04a0 | ||
|
|
d371b5ad09 | ||
|
|
258ae8e654 | ||
|
|
dc7e5b5a4f | ||
|
|
329b2def38 | ||
|
|
56dc224e16 | ||
|
|
de04e342e8 | ||
|
|
80e12a8599 | ||
|
|
64bb6129a8 | ||
|
|
53ffc12a99 | ||
|
|
9b173f3ff2 | ||
|
|
e5046db928 | ||
|
|
2638d222e7 | ||
|
|
a0d15fb595 | ||
|
|
81d8289158 | ||
|
|
6c5f2c5c64 | ||
|
|
85613aac00 | ||
|
|
9a86a9fe85 | ||
|
|
69df66b471 | ||
|
|
665e1b4f67 | ||
|
|
93c68cc903 | ||
|
|
19f5191a5d | ||
|
|
d10aed8fe5 | ||
|
|
78f014cad3 | ||
|
|
53464e0971 | ||
|
|
e7100c4cba | ||
|
|
33e61634be | ||
|
|
5518810889 | ||
|
|
e54a25da78 | ||
|
|
aa0472e5c5 | ||
|
|
f3f50b87af | ||
|
|
e4294a5e38 | ||
|
|
b5e8383342 | ||
|
|
141063117e | ||
|
|
d4e799b202 | ||
|
|
fcacb82c57 | ||
|
|
60a7159a4d | ||
|
|
7eee58d5c1 | ||
|
|
475a1b1d15 | ||
|
|
c6b7d2a5cc | ||
|
|
3a2956a2c6 | ||
|
|
30435c5371 | ||
|
|
1192005c19 | ||
|
|
4e7c5b0d1b | ||
|
|
db11b2be27 | ||
|
|
5654345b2a | ||
|
|
8ba5b73dab | ||
|
|
5e47496704 | ||
|
|
585dbe0d10 | ||
|
|
0d47875dec | ||
|
|
a904cac016 | ||
|
|
553a857cb6 | ||
|
|
4e56f88463 | ||
|
|
b311256cc1 | ||
|
|
5c6776d120 | ||
|
|
4a9c011b93 | ||
|
|
54352825fd | ||
|
|
3b75962ec1 | ||
|
|
3db6fa5bdb | ||
|
|
04753e56e4 | ||
|
|
b6244075a7 | ||
|
|
7c45179248 | ||
|
|
eb96285a5c | ||
|
|
584976fc49 | ||
|
|
ad8602a3d5 | ||
|
|
f27e4ef892 | ||
|
|
41d703d825 | ||
|
|
8af500237d | ||
|
|
6e2e5cbfe4 | ||
|
|
935f7acfa2 | ||
|
|
c588de84f3 | ||
|
|
54c281475c | ||
|
|
3ac37e06bb | ||
|
|
86e53360ac | ||
|
|
16d6c7c9b1 | ||
|
|
cb81bec042 | ||
|
|
3ab28e8201 |
38
.cursor/rules/coding-standards.mdc
Normal file
@@ -0,0 +1,38 @@
|
||||
---
|
||||
globs: *.py
|
||||
---
|
||||
|
||||
# Python Coding Standards
|
||||
|
||||
## Code Quality Principles
|
||||
- **Simplicity First**: Prefer clear, readable code over clever optimizations
|
||||
- **Explicit over Implicit**: Make intentions clear through naming and structure
|
||||
- **Fail Fast**: Validate inputs and handle errors early
|
||||
- **Documentation**: Use docstrings for classes and complex functions
|
||||
|
||||
## Naming Conventions
|
||||
- **Classes**: PascalCase (e.g., `NHLRecentManager`)
|
||||
- **Functions/Variables**: snake_case (e.g., `fetch_game_data`)
|
||||
- **Constants**: UPPER_SNAKE_CASE (e.g., `ESPN_NHL_SCOREBOARD_URL`)
|
||||
- **Private methods**: Leading underscore (e.g., `_fetch_data`)
|
||||
|
||||
## Error Handling
|
||||
- **Logging**: Use structured logging with context (e.g., `[NHL Recent]`)
|
||||
- **Exceptions**: Catch specific exceptions, not bare `except:`
|
||||
- **User-friendly messages**: Explain what went wrong and potential solutions
|
||||
- **Graceful degradation**: Continue operation when non-critical features fail
|
||||
|
||||
## Manager Pattern
|
||||
All sports managers should follow this structure:
|
||||
```python
|
||||
class BaseManager:
|
||||
def __init__(self, config, display_manager, cache_manager)
|
||||
def update(self) # Fetch and process data
|
||||
def display(self, force_clear=False) # Render to display
|
||||
```
|
||||
|
||||
## Configuration Management
|
||||
- **Type hints**: Use for function parameters and return values
|
||||
- **Configuration validation**: Check required fields on initialization
|
||||
- **Default values**: Provide sensible defaults in code, not config
|
||||
- **Environment awareness**: Handle different deployment contexts
|
||||
42
.cursor/rules/configuration-management.mdc
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
globs: config/*.json,src/*.py
|
||||
---
|
||||
|
||||
# Configuration Management
|
||||
|
||||
## Configuration Structure
|
||||
- **Main config**: [config/config.json](mdc:config/config.json) - Primary configuration
|
||||
- **Secrets**: [config/config_secrets.json](mdc:config/config_secrets.json) - API keys and sensitive data
|
||||
- **Templates**: [config/config.template.json](mdc:config/config.template.json) - Default values
|
||||
|
||||
## Configuration Principles
|
||||
- **Validation**: Check required fields and data types on startup
|
||||
- **Defaults**: Provide sensible defaults in code, not just config
|
||||
- **Environment awareness**: Handle development vs production differences
|
||||
- **Security**: Never commit secrets to version control
|
||||
|
||||
## Manager Configuration Pattern
|
||||
```python
|
||||
def __init__(self, config, display_manager, cache_manager):
|
||||
self.mode_config = config.get("sport_scoreboard", {})
|
||||
self.favorite_teams = self.mode_config.get("favorite_teams", [])
|
||||
self.show_favorite_only = self.mode_config.get("show_favorite_teams_only", False)
|
||||
```
|
||||
|
||||
## Required Configuration Sections
|
||||
- **Display settings**: Update intervals, display durations
|
||||
- **API settings**: Timeouts, retry logic, rate limiting
|
||||
- **Background service**: Threading, caching, priority settings
|
||||
- **Team preferences**: Favorite teams, filtering options
|
||||
|
||||
## Configuration Validation
|
||||
- **Type checking**: Ensure numeric values are numbers, lists are lists
|
||||
- **Range validation**: Check that intervals are reasonable
|
||||
- **Dependency checking**: Verify required services are available
|
||||
- **Fallback values**: Provide defaults when config is missing or invalid
|
||||
|
||||
## Best Practices
|
||||
- **Documentation**: Comment complex configuration options
|
||||
- **Examples**: Provide working examples in templates
|
||||
- **Migration**: Handle configuration changes between versions
|
||||
- **Testing**: Validate configuration in test environments
|
||||
50
.cursor/rules/error-handling-logging.mdc
Normal file
@@ -0,0 +1,50 @@
|
||||
---
|
||||
globs: src/*.py
|
||||
---
|
||||
|
||||
# Error Handling and Logging
|
||||
|
||||
## Logging Standards
|
||||
- **Structured prefixes**: Use consistent tags like `[NHL Recent]`, `[NFL Live]`
|
||||
- **Context information**: Include relevant details (team names, game status, dates)
|
||||
- **Appropriate levels**:
|
||||
- `info`: Normal operations and status updates
|
||||
- `debug`: Detailed information for troubleshooting
|
||||
- `warning`: Non-critical issues that should be noted
|
||||
- `error`: Problems that need attention
|
||||
|
||||
## Error Handling Patterns
|
||||
```python
|
||||
try:
|
||||
data = self._fetch_data()
|
||||
if not data or 'events' not in data:
|
||||
self.logger.warning("[Manager] No events found in API response")
|
||||
return
|
||||
except requests.exceptions.RequestException as e:
|
||||
self.logger.error(f"[Manager] API error: {e}")
|
||||
return None
|
||||
```
|
||||
|
||||
## User-Friendly Messages
|
||||
- **Explain the situation**: "No games available during off-season"
|
||||
- **Provide context**: "NHL season typically runs October-June"
|
||||
- **Suggest solutions**: "Check back when season starts"
|
||||
- **Distinguish issues**: API problems vs no data vs filtering results
|
||||
|
||||
## Graceful Degradation
|
||||
- **Fallback content**: Show alternative games when favorites unavailable
|
||||
- **Cached data**: Use cached data when API fails
|
||||
- **Service continuity**: Continue operation when non-critical features fail
|
||||
- **Clear communication**: Explain what's happening to users
|
||||
|
||||
## Debugging Support
|
||||
- **Comprehensive logging**: Log API responses, filtering results, display updates
|
||||
- **State tracking**: Log current state and transitions
|
||||
- **Performance monitoring**: Track timing and resource usage
|
||||
- **Error context**: Include stack traces for debugging
|
||||
|
||||
## Off-Season Awareness
|
||||
- **Seasonal messaging**: Different messages for different times of year
|
||||
- **Helpful context**: Explain why no games are available
|
||||
- **Future planning**: Mention when season starts
|
||||
- **Realistic expectations**: Set appropriate expectations during off-season
|
||||
51
.cursor/rules/git-workflow.mdc
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# Git Workflow and Branching
|
||||
|
||||
## Branch Naming Conventions
|
||||
- **Features**: `feature/description-of-feature` (e.g., `feature/weather-forecast-improvements`)
|
||||
- **Bug fixes**: `fix/description-of-bug` (e.g., `fix/nhl-manager-improvements`)
|
||||
- **Hotfixes**: `hotfix/critical-issue-description`
|
||||
- **Refactoring**: `refactor/description-of-refactor`
|
||||
|
||||
## Commit Message Format
|
||||
```
|
||||
type(scope): description
|
||||
|
||||
[optional body]
|
||||
|
||||
[optional footer]
|
||||
```
|
||||
|
||||
**Types**: feat, fix, docs, style, refactor, test, chore
|
||||
**Examples**:
|
||||
- `feat(nhl): Add enhanced logging for data visibility`
|
||||
- `fix(display): Resolve rendering performance issue`
|
||||
- `docs(api): Update ESPN API integration guide`
|
||||
|
||||
## Pull Request Guidelines
|
||||
- **Self-review**: Review your own PR before requesting review
|
||||
- **Testing**: Test thoroughly on Raspberry Pi hardware
|
||||
- **Documentation**: Update relevant documentation if needed
|
||||
- **Clean history**: Squash commits if necessary for clean history
|
||||
|
||||
## Code Review Checklist
|
||||
- **Code Quality**: Proper error handling, logging, type hints
|
||||
- **Architecture**: Follows project patterns, doesn't break existing functionality
|
||||
- **Performance**: No negative impact on display performance
|
||||
- **Testing**: Works on Raspberry Pi hardware
|
||||
- **Documentation**: Comments added for complex logic
|
||||
|
||||
## Merge Strategies
|
||||
- **Squash and Merge**: Preferred for feature branches and bug fixes
|
||||
- **Merge Commit**: For complex features with multiple logical commits
|
||||
- **Rebase and Merge**: For simple, single-commit changes
|
||||
|
||||
## Best Practices
|
||||
- **Keep branches small and focused**
|
||||
- **Commit frequently with meaningful messages**
|
||||
- **Update branch regularly with main**
|
||||
- **Test changes incrementally**
|
||||
- **Delete feature branches after merge**
|
||||
213
.cursor/rules/github-branches-rule.mdc
Normal file
@@ -0,0 +1,213 @@
|
||||
---
|
||||
description: GitHub branching and pull request best practices for LEDMatrix project
|
||||
globs: ["**/*.py", "**/*.md", "**/*.json", "**/*.sh"]
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# GitHub Branching and Pull Request Guidelines
|
||||
|
||||
## Branch Naming Conventions
|
||||
|
||||
### Feature Branches
|
||||
- **Format**: `feature/description-of-feature`
|
||||
- **Examples**:
|
||||
- `feature/weather-forecast-improvements`
|
||||
- `feature/stock-api-integration`
|
||||
- `feature/nba-live-scores`
|
||||
|
||||
### Bug Fix Branches
|
||||
- **Format**: `fix/description-of-bug`
|
||||
- **Examples**:
|
||||
- `fix/leaderboard-scrolling-performance`
|
||||
- `fix/weather-api-timeout`
|
||||
- `fix/display-rendering-issue`
|
||||
|
||||
### Hotfix Branches
|
||||
- **Format**: `hotfix/critical-issue-description`
|
||||
- **Examples**:
|
||||
- `hotfix/display-crash-fix`
|
||||
- `hotfix/api-rate-limit-fix`
|
||||
|
||||
### Refactoring Branches
|
||||
- **Format**: `refactor/description-of-refactor`
|
||||
- **Examples**:
|
||||
- `refactor/sports-manager-architecture`
|
||||
- `refactor/cache-management-system`
|
||||
|
||||
## Branch Management Rules
|
||||
|
||||
### Main Branch Protection
|
||||
- **`main`** branch is protected and requires PR reviews
|
||||
- Never commit directly to `main`
|
||||
- All changes must go through pull requests
|
||||
|
||||
### Branch Lifecycle
|
||||
1. **Create** branch from `main` when starting work
|
||||
2. **Keep** branch up-to-date with `main` regularly
|
||||
3. **Test** thoroughly before creating PR
|
||||
4. **Delete** branch after successful merge
|
||||
|
||||
### Branch Updates
|
||||
```bash
|
||||
# Before starting new work
|
||||
git checkout main
|
||||
git pull origin main
|
||||
|
||||
# Create new branch
|
||||
git checkout -b feature/your-feature-name
|
||||
|
||||
# Keep branch updated during development
|
||||
git checkout main
|
||||
git pull origin main
|
||||
git checkout feature/your-feature-name
|
||||
git merge main
|
||||
```
|
||||
|
||||
## Pull Request Guidelines
|
||||
|
||||
### PR Title Format
|
||||
- **Feature**: `feat: Add weather forecast improvements`
|
||||
- **Fix**: `fix: Resolve leaderboard scrolling performance issue`
|
||||
- **Refactor**: `refactor: Improve sports manager architecture`
|
||||
- **Docs**: `docs: Update API integration guide`
|
||||
- **Test**: `test: Add unit tests for weather manager`
|
||||
|
||||
### PR Description Template
|
||||
```markdown
|
||||
## Description
|
||||
Brief description of changes and motivation.
|
||||
|
||||
## Type of Change
|
||||
- [ ] Bug fix (non-breaking change)
|
||||
- [ ] New feature (non-breaking change)
|
||||
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
||||
- [ ] Documentation update
|
||||
- [ ] Performance improvement
|
||||
- [ ] Refactoring
|
||||
|
||||
## Testing
|
||||
- [ ] Tested on Raspberry Pi hardware
|
||||
- [ ] Verified display rendering works correctly
|
||||
- [ ] Checked API integration functionality
|
||||
- [ ] Tested error handling scenarios
|
||||
|
||||
## Screenshots/Videos
|
||||
(If applicable, add screenshots or videos of the changes)
|
||||
|
||||
## Checklist
|
||||
- [ ] Code follows project style guidelines
|
||||
- [ ] Self-review completed
|
||||
- [ ] Comments added for complex logic
|
||||
- [ ] No hardcoded values or API keys
|
||||
- [ ] Error handling implemented
|
||||
- [ ] Logging added where appropriate
|
||||
```
|
||||
|
||||
### PR Review Requirements
|
||||
|
||||
#### For Reviewers
|
||||
- **Code Quality**: Check for proper error handling, logging, and type hints
|
||||
- **Architecture**: Ensure changes follow project patterns and don't break existing functionality
|
||||
- **Performance**: Verify changes don't negatively impact display performance
|
||||
- **Testing**: Confirm changes work on Raspberry Pi hardware
|
||||
- **Documentation**: Check if documentation needs updates
|
||||
|
||||
#### For Authors
|
||||
- **Self-Review**: Review your own PR before requesting review
|
||||
- **Testing**: Test thoroughly on Pi hardware before submitting
|
||||
- **Documentation**: Update relevant documentation if needed
|
||||
- **Clean History**: Squash commits if necessary for clean history
|
||||
|
||||
## Commit Message Guidelines
|
||||
|
||||
### Format
|
||||
```
|
||||
type(scope): description
|
||||
|
||||
[optional body]
|
||||
|
||||
[optional footer]
|
||||
```
|
||||
|
||||
### Types
|
||||
- **feat**: New feature
|
||||
- **fix**: Bug fix
|
||||
- **docs**: Documentation changes
|
||||
- **style**: Code style changes (formatting, etc.)
|
||||
- **refactor**: Code refactoring
|
||||
- **test**: Adding or updating tests
|
||||
- **chore**: Maintenance tasks
|
||||
|
||||
### Examples
|
||||
```
|
||||
feat(weather): Add hourly forecast display
|
||||
fix(nba): Resolve live score update issue
|
||||
docs(api): Update ESPN API integration guide
|
||||
refactor(sports): Improve base class architecture
|
||||
```
|
||||
|
||||
## Merge Strategies
|
||||
|
||||
### Squash and Merge (Preferred)
|
||||
- Use for feature branches and bug fixes
|
||||
- Creates clean, linear history
|
||||
- Combines all commits into single commit
|
||||
|
||||
### Merge Commit
|
||||
- Use for complex features with multiple logical commits
|
||||
- Preserves commit history
|
||||
- Use when commit messages are meaningful
|
||||
|
||||
### Rebase and Merge
|
||||
- Use sparingly for simple, single-commit changes
|
||||
- Creates linear history without merge commits
|
||||
|
||||
## Release Management
|
||||
|
||||
### Version Tags
|
||||
- Use semantic versioning: `v1.2.3`
|
||||
- Tag releases on `main` branch
|
||||
- Create release notes with technical details
|
||||
|
||||
### Release Branches
|
||||
- **Format**: `release/v1.2.3`
|
||||
- Use for release preparation
|
||||
- Include version bumps and final testing
|
||||
|
||||
## Emergency Procedures
|
||||
|
||||
### Hotfix Process
|
||||
1. Create `hotfix/` branch from `main`
|
||||
2. Make minimal fix
|
||||
3. Test thoroughly
|
||||
4. Create PR with expedited review
|
||||
5. Merge to `main` and tag release
|
||||
6. Cherry-pick to other branches if needed
|
||||
|
||||
### Rollback Process
|
||||
1. Identify last known good commit
|
||||
2. Create revert PR if possible
|
||||
3. Use `git revert` for clean rollback
|
||||
4. Tag rollback release
|
||||
5. Document issue and resolution
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Before Creating PR
|
||||
- [ ] Run all tests locally
|
||||
- [ ] Test on Raspberry Pi hardware
|
||||
- [ ] Check for linting errors
|
||||
- [ ] Update documentation if needed
|
||||
- [ ] Ensure commit messages are clear
|
||||
|
||||
### During Development
|
||||
- [ ] Keep branches small and focused
|
||||
- [ ] Commit frequently with meaningful messages
|
||||
- [ ] Update branch regularly with main
|
||||
- [ ] Test changes incrementally
|
||||
|
||||
### After PR Approval
|
||||
- [ ] Delete feature branch after merge
|
||||
- [ ] Update local main branch
|
||||
- [ ] Verify changes work in production
|
||||
- [ ] Update any related documentation
|
||||
23
.cursor/rules/project-structure.mdc
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# LEDMatrix Project Structure
|
||||
|
||||
## Core Architecture
|
||||
- **Main entry point**: [run.py](mdc:run.py) - Primary application launcher
|
||||
- **Configuration**: [config/config.json](mdc:config/config.json) - Main configuration file
|
||||
- **Display management**: [src/display_controller.py](mdc:src/display_controller.py) - Core display logic
|
||||
- **Web interface**: [web_interface_v2.py](mdc:web_interface_v2.py) - Modern web UI
|
||||
|
||||
## Source Code Organization
|
||||
- **Managers**: [src/](mdc:src/) - All sports/weather/stock managers
|
||||
- **Assets**: [assets/](mdc:assets/) - Logos, fonts, and static resources
|
||||
- **Tests**: [test/](mdc:test/) - Unit and integration tests
|
||||
- **Documentation**: [LEDMatrix.wiki/](mdc:LEDMatrix.wiki/) - Comprehensive guides
|
||||
|
||||
## Key Design Principles
|
||||
- **Single Responsibility**: Each manager handles one sport/domain
|
||||
- **Consistent Patterns**: All managers follow similar structure
|
||||
- **Configuration-Driven**: Behavior controlled via [config/config.json](mdc:config/config.json)
|
||||
- **Raspberry Pi Focus**: Optimized for Pi hardware, not Windows development
|
||||
41
.cursor/rules/raspberry-pi-development.mdc
Normal file
@@ -0,0 +1,41 @@
|
||||
---
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# Raspberry Pi Development Guidelines
|
||||
|
||||
## Hardware Constraints
|
||||
- **Pi-only execution**: Code must run on Raspberry Pi, not Windows development machine
|
||||
- **LED matrix library**: Uses [rpi-rgb-led-matrix-master/](mdc:rpi-rgb-led-matrix-master/) for hardware control
|
||||
- **Memory limitations**: Optimize for Pi's limited RAM
|
||||
- **Performance**: Consider Pi's CPU capabilities in design
|
||||
|
||||
## Development Workflow
|
||||
- **Local development**: Write and test code on Windows
|
||||
- **Pi deployment**: Deploy and test on actual Pi hardware
|
||||
- **SSH access**: Use SSH for Pi-based testing and debugging
|
||||
- **Service management**: Use systemd services for production deployment
|
||||
|
||||
## Testing Strategy
|
||||
- **Unit tests**: Test logic without hardware dependencies
|
||||
- **Integration tests**: Test with mock display managers
|
||||
- **Hardware tests**: Validate on actual Pi with LED matrix
|
||||
- **Performance tests**: Monitor memory and CPU usage
|
||||
|
||||
## Deployment Considerations
|
||||
- **Service files**: [ledmatrix.service](mdc:ledmatrix.service), [ledmatrix-web.service](mdc:ledmatrix-web.service)
|
||||
- **Installation scripts**: [first_time_install.sh](mdc:first_time_install.sh), [install_service.sh](mdc:install_service.sh)
|
||||
- **Dependencies**: [requirements.txt](mdc:requirements.txt) for Pi environment
|
||||
- **Permissions**: Handle file permissions for Pi user
|
||||
|
||||
## Performance Optimization
|
||||
- **Caching**: Use [src/cache_manager.py](mdc:src/cache_manager.py) for data persistence
|
||||
- **Background services**: Non-blocking data fetching
|
||||
- **Memory management**: Clean up resources regularly
|
||||
- **Display optimization**: Minimize unnecessary redraws
|
||||
|
||||
## Debugging on Pi
|
||||
- **Logging**: Comprehensive logging for remote debugging
|
||||
- **Error reporting**: Clear error messages for troubleshooting
|
||||
- **Status monitoring**: Health checks and status reporting
|
||||
- **Remote access**: Web interface for configuration and monitoring
|
||||
42
.cursor/rules/sports-managers.mdc
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
globs: src/*_managers.py
|
||||
---
|
||||
|
||||
# Sports Manager Development
|
||||
|
||||
## Manager Architecture
|
||||
All sports managers inherit from base classes and follow consistent patterns:
|
||||
- **Base classes**: [src/nhl_managers.py](mdc:src/nhl_managers.py), [src/nfl_managers.py](mdc:src/nfl_managers.py)
|
||||
- **Common functionality**: Data fetching, caching, display rendering
|
||||
- **Configuration-driven**: Behavior controlled via config sections
|
||||
|
||||
## Required Methods
|
||||
```python
|
||||
def __init__(self, config, display_manager, cache_manager)
|
||||
def update(self) # Fetch fresh data
|
||||
def display(self, force_clear=False) # Render current data
|
||||
```
|
||||
|
||||
## Data Flow Pattern
|
||||
1. **Fetch**: Get data from API (with caching)
|
||||
2. **Process**: Extract relevant game information
|
||||
3. **Filter**: Apply favorite team preferences
|
||||
4. **Display**: Render to LED matrix
|
||||
|
||||
## Logging Standards
|
||||
- **Structured prefixes**: `[NHL Recent]`, `[NFL Live]`, etc.
|
||||
- **Context information**: Include team names, game status, dates
|
||||
- **Debug levels**: Use appropriate log levels (info, debug, warning, error)
|
||||
- **User-friendly messages**: Explain what's happening and why
|
||||
|
||||
## Error Handling
|
||||
- **API failures**: Log and continue with cached data if available
|
||||
- **No data scenarios**: Distinguish between API issues vs no games available
|
||||
- **Off-season awareness**: Provide helpful context during non-active periods
|
||||
- **Fallback behavior**: Show alternative content when preferred content unavailable
|
||||
|
||||
## Configuration Integration
|
||||
- **Required settings**: Validate on initialization
|
||||
- **Optional settings**: Provide sensible defaults
|
||||
- **Background service**: Use for non-blocking data fetching
|
||||
- **Caching strategy**: Implement intelligent cache management
|
||||
51
.cursor/rules/testing-standards.mdc
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
globs: test/*.py,src/*.py
|
||||
---
|
||||
|
||||
# Testing Standards
|
||||
|
||||
## Test Organization
|
||||
- **Test directory**: [test/](mdc:test/) - All test files
|
||||
- **Unit tests**: Test individual components in isolation
|
||||
- **Integration tests**: Test component interactions
|
||||
- **Hardware tests**: Validate on Raspberry Pi with actual LED matrix
|
||||
|
||||
## Testing Principles
|
||||
- **Test behavior, not implementation**: Focus on what the code does, not how
|
||||
- **Mock external dependencies**: Use mocks for APIs, display managers, cache
|
||||
- **Test edge cases**: Empty data, API failures, configuration errors
|
||||
- **Pi-specific testing**: Validate hardware integration
|
||||
|
||||
## Test Structure
|
||||
```python
|
||||
def test_manager_initialization():
|
||||
"""Test that manager initializes with valid config"""
|
||||
config = {"sport_scoreboard": {"enabled": True}}
|
||||
manager = ManagerClass(config, mock_display, mock_cache)
|
||||
assert manager.enabled == True
|
||||
|
||||
def test_api_failure_handling():
|
||||
"""Test graceful handling of API failures"""
|
||||
# Test that system continues when API fails
|
||||
# Verify fallback to cached data
|
||||
# Check appropriate error logging
|
||||
```
|
||||
|
||||
## Mock Patterns
|
||||
- **Display Manager**: Mock for testing without hardware
|
||||
- **Cache Manager**: Mock for testing data persistence
|
||||
- **API responses**: Mock for consistent test data
|
||||
- **Configuration**: Use test-specific configs
|
||||
|
||||
## Test Categories
|
||||
- **Unit tests**: Individual manager methods
|
||||
- **Integration tests**: Manager interactions with services
|
||||
- **Configuration tests**: Validate config loading and validation
|
||||
- **Error handling tests**: API failures, invalid data, edge cases
|
||||
|
||||
## Testing Best Practices
|
||||
- **Descriptive names**: Test names should explain what they test
|
||||
- **Single responsibility**: Each test should verify one thing
|
||||
- **Independent tests**: Tests should not depend on each other
|
||||
- **Clean setup/teardown**: Reset state between tests
|
||||
- **Pi compatibility**: Ensure tests work in Pi environment
|
||||
38
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Desktop (please complete the following information):**
|
||||
- OS: [e.g. iOS]
|
||||
- Browser [e.g. chrome, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Smartphone (please complete the following information):**
|
||||
- Device: [e.g. iPhone6]
|
||||
- OS: [e.g. iOS8.1]
|
||||
- Browser [e.g. stock browser, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
4
.gitignore
vendored
@@ -5,6 +5,8 @@ __pycache__/
|
||||
|
||||
# Secrets
|
||||
config/config_secrets.json
|
||||
config/config.json
|
||||
config/config.json.backup
|
||||
credentials.json
|
||||
token.pickle
|
||||
|
||||
@@ -13,6 +15,7 @@ token.pickle
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
venv*/
|
||||
ENV/
|
||||
|
||||
# IDE
|
||||
@@ -20,6 +23,7 @@ ENV/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
emulator_config.json
|
||||
|
||||
# Cache directory
|
||||
cache/
|
||||
148
AP_TOP_25_IMPLEMENTATION_SUMMARY.md
Normal file
@@ -0,0 +1,148 @@
|
||||
# AP Top 25 Dynamic Teams Implementation Summary
|
||||
|
||||
## 🎯 Feature Overview
|
||||
|
||||
Successfully implemented dynamic team resolution for AP Top 25 rankings in the LEDMatrix project. Users can now add `"AP_TOP_25"` to their `favorite_teams` list and it will automatically resolve to the current AP Top 25 teams, updating weekly as rankings change.
|
||||
|
||||
## 🚀 What Was Implemented
|
||||
|
||||
### 1. Dynamic Team Resolver (`src/dynamic_team_resolver.py`)
|
||||
- **Core Functionality**: Resolves dynamic team names like `"AP_TOP_25"` into actual team abbreviations
|
||||
- **API Integration**: Fetches current AP Top 25 rankings from ESPN API
|
||||
- **Caching**: 1-hour cache to reduce API calls and improve performance
|
||||
- **Error Handling**: Graceful fallback when rankings unavailable
|
||||
- **Multiple Patterns**: Supports `AP_TOP_25`, `AP_TOP_10`, `AP_TOP_5`
|
||||
|
||||
### 2. Sports Core Integration (`src/base_classes/sports.py`)
|
||||
- **Automatic Resolution**: Favorite teams are automatically resolved at initialization
|
||||
- **Seamless Integration**: Works with existing favorite teams system
|
||||
- **Logging**: Clear logging of dynamic team resolution
|
||||
- **Backward Compatibility**: Regular team names work exactly as before
|
||||
|
||||
### 3. Configuration Updates (`config/config.template.json`)
|
||||
- **Example Usage**: Added `"AP_TOP_25"` to NCAA FB configuration example
|
||||
- **Documentation**: Clear examples of how to use dynamic teams
|
||||
|
||||
### 4. Comprehensive Testing
|
||||
- **Unit Tests**: `test/test_dynamic_team_resolver.py` - Core functionality
|
||||
- **Integration Tests**: `test/test_dynamic_teams_simple.py` - Configuration integration
|
||||
- **Edge Cases**: Unknown dynamic teams, empty lists, mixed teams
|
||||
- **Performance**: Caching verification and performance testing
|
||||
|
||||
### 5. Documentation (`LEDMatrix.wiki/AP_TOP_25_DYNAMIC_TEAMS.md`)
|
||||
- **Complete Guide**: How to use the feature
|
||||
- **Configuration Examples**: Multiple usage scenarios
|
||||
- **Technical Details**: API integration, caching, performance
|
||||
- **Troubleshooting**: Common issues and solutions
|
||||
- **Best Practices**: Recommendations for optimal usage
|
||||
|
||||
## 🔧 Technical Implementation
|
||||
|
||||
### Dynamic Team Resolution Process
|
||||
1. **Detection**: Check if team name is in `DYNAMIC_PATTERNS`
|
||||
2. **API Fetch**: Retrieve current rankings from ESPN API
|
||||
3. **Resolution**: Convert dynamic name to actual team abbreviations
|
||||
4. **Caching**: Store results for 1 hour to reduce API calls
|
||||
5. **Integration**: Seamlessly work with existing favorite teams logic
|
||||
|
||||
### Supported Dynamic Teams
|
||||
| Dynamic Team | Description | Teams Returned |
|
||||
|-------------|-------------|----------------|
|
||||
| `"AP_TOP_25"` | Current AP Top 25 | All 25 ranked teams |
|
||||
| `"AP_TOP_10"` | Current AP Top 10 | Top 10 ranked teams |
|
||||
| `"AP_TOP_5"` | Current AP Top 5 | Top 5 ranked teams |
|
||||
|
||||
### Configuration Examples
|
||||
|
||||
#### Basic AP Top 25 Usage
|
||||
```json
|
||||
{
|
||||
"ncaa_fb_scoreboard": {
|
||||
"enabled": true,
|
||||
"show_favorite_teams_only": true,
|
||||
"favorite_teams": ["AP_TOP_25"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Mixed Regular and Dynamic Teams
|
||||
```json
|
||||
{
|
||||
"ncaa_fb_scoreboard": {
|
||||
"enabled": true,
|
||||
"show_favorite_teams_only": true,
|
||||
"favorite_teams": [
|
||||
"UGA",
|
||||
"AUB",
|
||||
"AP_TOP_25"
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ✅ Testing Results
|
||||
|
||||
### All Tests Passing
|
||||
- **Core Functionality**: ✅ Dynamic team resolution works correctly
|
||||
- **API Integration**: ✅ Successfully fetches AP Top 25 from ESPN
|
||||
- **Caching**: ✅ 1-hour cache reduces API calls significantly
|
||||
- **Edge Cases**: ✅ Unknown dynamic teams, empty lists handled properly
|
||||
- **Performance**: ✅ Second call uses cache (0.000s vs 0.062s)
|
||||
- **Integration**: ✅ Works seamlessly with existing sports managers
|
||||
|
||||
### Test Coverage
|
||||
- **Unit Tests**: 6 test categories, all passing
|
||||
- **Integration Tests**: Configuration integration verified
|
||||
- **Edge Cases**: 4 edge case scenarios tested
|
||||
- **Performance**: Caching and API call optimization verified
|
||||
|
||||
## 🎉 Benefits for Users
|
||||
|
||||
### Automatic Updates
|
||||
- **Weekly Updates**: Rankings automatically update when ESPN releases new rankings
|
||||
- **No Manual Work**: Users don't need to manually update team lists
|
||||
- **Always Current**: Always shows games for the current top-ranked teams
|
||||
|
||||
### Flexible Options
|
||||
- **Multiple Ranges**: Choose from AP_TOP_5, AP_TOP_10, or AP_TOP_25
|
||||
- **Mixed Usage**: Combine with regular favorite teams
|
||||
- **Easy Configuration**: Simple addition to existing config
|
||||
|
||||
### Performance Optimized
|
||||
- **Efficient Caching**: 1-hour cache reduces API calls
|
||||
- **Background Updates**: Rankings fetched in background
|
||||
- **Minimal Overhead**: Only fetches when dynamic teams are used
|
||||
|
||||
## 🔮 Future Enhancements
|
||||
|
||||
The system is designed to be extensible for future dynamic team types:
|
||||
|
||||
- `"PLAYOFF_TEAMS"`: Teams in playoff contention
|
||||
- `"CONFERENCE_LEADERS"`: Conference leaders
|
||||
- `"HEISMAN_CANDIDATES"`: Teams with Heisman candidates
|
||||
- `"RIVALRY_GAMES"`: Traditional rivalry matchups
|
||||
|
||||
## 📋 Usage Instructions
|
||||
|
||||
### For Users
|
||||
1. **Add to Config**: Add `"AP_TOP_25"` to your `favorite_teams` list
|
||||
2. **Enable Filtering**: Set `"show_favorite_teams_only": true`
|
||||
3. **Enjoy**: System automatically shows games for current top 25 teams
|
||||
|
||||
### For Developers
|
||||
1. **Import**: `from src.dynamic_team_resolver import DynamicTeamResolver`
|
||||
2. **Resolve**: `resolver.resolve_teams(["AP_TOP_25"], 'ncaa_fb')`
|
||||
3. **Integrate**: Works automatically with existing SportsCore classes
|
||||
|
||||
## 🎯 Success Metrics
|
||||
|
||||
- **✅ Feature Complete**: All planned functionality implemented
|
||||
- **✅ Fully Tested**: Comprehensive test suite with 100% pass rate
|
||||
- **✅ Well Documented**: Complete documentation and examples
|
||||
- **✅ Performance Optimized**: Efficient caching and API usage
|
||||
- **✅ User Friendly**: Simple configuration, automatic updates
|
||||
- **✅ Backward Compatible**: Existing configurations continue to work
|
||||
|
||||
## 🚀 Ready for Production
|
||||
|
||||
The AP Top 25 Dynamic Teams feature is fully implemented, tested, and ready for production use. Users can now enjoy automatically updating favorite teams that follow the current AP Top 25 rankings without any manual intervention.
|
||||
208
BACKGROUND_SERVICE_README.md
Normal file
@@ -0,0 +1,208 @@
|
||||
# Background Data Service for LEDMatrix
|
||||
|
||||
## Overview
|
||||
|
||||
The Background Data Service is a new feature that implements background threading for season data fetching to prevent blocking the main display loop. This significantly improves responsiveness and user experience during data fetching operations.
|
||||
|
||||
## Key Benefits
|
||||
|
||||
- **Non-blocking**: Season data fetching no longer blocks the main display loop
|
||||
- **Immediate Response**: Returns cached or partial data immediately while fetching complete data in background
|
||||
- **Configurable**: Can be enabled/disabled per sport with customizable settings
|
||||
- **Thread-safe**: Uses proper synchronization for concurrent access
|
||||
- **Retry Logic**: Automatic retry with exponential backoff for failed requests
|
||||
- **Progress Tracking**: Comprehensive logging and statistics
|
||||
|
||||
## Architecture
|
||||
|
||||
### Core Components
|
||||
|
||||
1. **BackgroundDataService**: Main service class managing background threads
|
||||
2. **FetchRequest**: Represents individual fetch operations
|
||||
3. **FetchResult**: Contains results of fetch operations
|
||||
4. **Sport Managers**: Updated to use background service
|
||||
|
||||
### How It Works
|
||||
|
||||
1. **Cache Check**: First checks for cached data and returns immediately if available
|
||||
2. **Background Fetch**: If no cache, starts background thread to fetch complete season data
|
||||
3. **Partial Data**: Returns immediate partial data (current/recent games) for quick display
|
||||
4. **Completion**: Background fetch completes and caches full dataset
|
||||
5. **Future Requests**: Subsequent requests use cached data for instant response
|
||||
|
||||
## Configuration
|
||||
|
||||
### NFL Configuration Example
|
||||
|
||||
```json
|
||||
{
|
||||
"nfl_scoreboard": {
|
||||
"enabled": true,
|
||||
"background_service": {
|
||||
"enabled": true,
|
||||
"max_workers": 3,
|
||||
"request_timeout": 30,
|
||||
"max_retries": 3,
|
||||
"priority": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Configuration Options
|
||||
|
||||
- **enabled**: Enable/disable background service (default: true)
|
||||
- **max_workers**: Maximum number of background threads (default: 3)
|
||||
- **request_timeout**: HTTP request timeout in seconds (default: 30)
|
||||
- **max_retries**: Maximum retry attempts for failed requests (default: 3)
|
||||
- **priority**: Request priority (higher = more important, default: 2)
|
||||
|
||||
## Implementation Status
|
||||
|
||||
### Phase 1: Background Season Data Fetching ✅ COMPLETED
|
||||
|
||||
- [x] Created BackgroundDataService class
|
||||
- [x] Implemented thread-safe data caching
|
||||
- [x] Added retry logic with exponential backoff
|
||||
- [x] Modified NFL manager to use background service
|
||||
- [x] Added configuration support
|
||||
- [x] Created test script
|
||||
|
||||
### Phase 2: Rollout to Other Sports (Next Steps)
|
||||
|
||||
- [ ] Apply to NCAAFB manager
|
||||
- [ ] Apply to NBA manager
|
||||
- [ ] Apply to NHL manager
|
||||
- [ ] Apply to MLB manager
|
||||
- [ ] Apply to other sport managers
|
||||
|
||||
## Testing
|
||||
|
||||
### Test Script
|
||||
|
||||
Run the test script to verify background service functionality:
|
||||
|
||||
```bash
|
||||
python test_background_service.py
|
||||
```
|
||||
|
||||
### Test Scenarios
|
||||
|
||||
1. **Cache Hit**: Verify immediate return of cached data
|
||||
2. **Background Fetch**: Verify non-blocking background data fetching
|
||||
3. **Partial Data**: Verify immediate return of partial data during background fetch
|
||||
4. **Completion**: Verify background fetch completion and caching
|
||||
5. **Subsequent Requests**: Verify cache usage for subsequent requests
|
||||
6. **Service Disabled**: Verify fallback to synchronous fetching
|
||||
|
||||
### Expected Results
|
||||
|
||||
- Initial fetch should return partial data immediately (< 1 second)
|
||||
- Background fetch should complete within 10-30 seconds
|
||||
- Subsequent fetches should use cache (< 0.1 seconds)
|
||||
- No blocking of main display loop
|
||||
|
||||
## Performance Impact
|
||||
|
||||
### Before Background Service
|
||||
- Season data fetch: 10-30 seconds (blocking)
|
||||
- Display loop: Frozen during fetch
|
||||
- User experience: Poor responsiveness
|
||||
|
||||
### After Background Service
|
||||
- Initial response: < 1 second (partial data)
|
||||
- Background fetch: 10-30 seconds (non-blocking)
|
||||
- Display loop: Continues normally
|
||||
- User experience: Excellent responsiveness
|
||||
|
||||
## Monitoring
|
||||
|
||||
### Logs
|
||||
|
||||
The service provides comprehensive logging:
|
||||
|
||||
```
|
||||
[NFL] Background service enabled with 3 workers
|
||||
[NFL] Starting background fetch for 2024 season schedule...
|
||||
[NFL] Using 15 immediate events while background fetch completes
|
||||
[NFL] Background fetch completed for 2024: 256 events
|
||||
```
|
||||
|
||||
### Statistics
|
||||
|
||||
Access service statistics:
|
||||
|
||||
```python
|
||||
stats = background_service.get_statistics()
|
||||
print(f"Total requests: {stats['total_requests']}")
|
||||
print(f"Cache hits: {stats['cached_hits']}")
|
||||
print(f"Average fetch time: {stats['average_fetch_time']:.2f}s")
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
### Automatic Retry
|
||||
- Failed requests are automatically retried with exponential backoff
|
||||
- Maximum retry attempts are configurable
|
||||
- Failed requests are logged with error details
|
||||
|
||||
### Fallback Behavior
|
||||
- If background service is disabled, falls back to synchronous fetching
|
||||
- If background fetch fails, returns partial data if available
|
||||
- Graceful degradation ensures system continues to function
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
### Phase 2 Features
|
||||
- Apply to all sport managers
|
||||
- Priority-based request queuing
|
||||
- Dynamic worker scaling
|
||||
- Request batching for efficiency
|
||||
|
||||
### Phase 3 Features
|
||||
- Real-time data streaming
|
||||
- WebSocket support for live updates
|
||||
- Advanced caching strategies
|
||||
- Performance analytics dashboard
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
1. **Background service not starting**
|
||||
- Check configuration: `background_service.enabled = true`
|
||||
- Verify cache manager is properly initialized
|
||||
- Check logs for initialization errors
|
||||
|
||||
2. **Slow background fetches**
|
||||
- Increase `request_timeout` in configuration
|
||||
- Check network connectivity
|
||||
- Monitor API rate limits
|
||||
|
||||
3. **Memory usage**
|
||||
- Background service automatically cleans up old requests
|
||||
- Adjust `max_workers` if needed
|
||||
- Monitor cache size
|
||||
|
||||
### Debug Mode
|
||||
|
||||
Enable debug logging for detailed information:
|
||||
|
||||
```python
|
||||
logging.getLogger('src.background_data_service').setLevel(logging.DEBUG)
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
When adding background service support to new sport managers:
|
||||
|
||||
1. Import the background service
|
||||
2. Initialize in `__init__` method
|
||||
3. Update data fetching method to use background service
|
||||
4. Add configuration options
|
||||
5. Test thoroughly
|
||||
6. Update documentation
|
||||
|
||||
## License
|
||||
|
||||
This feature is part of the LEDMatrix project and follows the same license terms.
|
||||
@@ -1,173 +0,0 @@
|
||||
# LEDMatrix Cache Strategy Analysis
|
||||
|
||||
## Current Implementation
|
||||
|
||||
Your LEDMatrix system uses a sophisticated multi-tier caching strategy that balances data freshness with API efficiency.
|
||||
|
||||
### Cache Duration Categories
|
||||
|
||||
#### 1. **Ultra Time-Sensitive Data (15-60 seconds)**
|
||||
- **Live Sports Scores**: Now respects sport-specific `live_update_interval` configuration
|
||||
- Soccer live data: Uses `soccer_scoreboard.live_update_interval` (default: 60 seconds)
|
||||
- NFL live data: Uses `nfl_scoreboard.live_update_interval` (default: 60 seconds)
|
||||
- NHL live data: Uses `nhl_scoreboard.live_update_interval` (default: 60 seconds)
|
||||
- NBA live data: Uses `nba_scoreboard.live_update_interval` (default: 60 seconds)
|
||||
- MLB live data: Uses `mlb.live_update_interval` (default: 60 seconds)
|
||||
- NCAA sports: Use respective `live_update_interval` configurations (default: 60 seconds)
|
||||
- **Current Weather**: 5 minutes (300 seconds)
|
||||
|
||||
#### 2. **Market Data (5-10 minutes)**
|
||||
- **Stocks**: 10 minutes (600 seconds) - market hours aware
|
||||
- **Crypto**: 5 minutes (300 seconds) - 24/7 trading
|
||||
- **Stock News**: 1 hour (3600 seconds)
|
||||
|
||||
#### 3. **Sports Data (5 minutes to 24 hours)**
|
||||
- **Recent Games**: 5 minutes (300 seconds)
|
||||
- **Upcoming Games**: 1 hour (3600 seconds)
|
||||
- **Season Schedules**: 24 hours (86400 seconds)
|
||||
- **Team Information**: 1 week (604800 seconds)
|
||||
|
||||
#### 4. **Static Data (1 week to 30 days)**
|
||||
- **Team Logos**: 30 days (2592000 seconds)
|
||||
- **Configuration Data**: 1 week (604800 seconds)
|
||||
|
||||
### Smart Cache Invalidation
|
||||
|
||||
Beyond time limits, the system uses content-based invalidation:
|
||||
|
||||
```python
|
||||
def has_data_changed(self, data_type: str, new_data: Dict[str, Any]) -> bool:
|
||||
"""Check if data has changed from cached version."""
|
||||
```
|
||||
|
||||
- **Weather**: Compares temperature and conditions
|
||||
- **Stocks**: Compares prices (only during market hours)
|
||||
- **Sports**: Compares scores, game status, inning details
|
||||
- **News**: Compares headlines and article IDs
|
||||
|
||||
### Market-Aware Caching
|
||||
|
||||
For stocks, the system extends cache duration during off-hours:
|
||||
|
||||
```python
|
||||
def _is_market_open(self) -> bool:
|
||||
"""Check if the US stock market is currently open."""
|
||||
# Only invalidates cache during market hours
|
||||
```
|
||||
|
||||
## Enhanced Cache Strategy
|
||||
|
||||
### Sport-Specific Live Update Intervals
|
||||
|
||||
The cache manager now automatically respects the `live_update_interval` configuration for each sport:
|
||||
|
||||
```python
|
||||
def get_sport_live_interval(self, sport_key: str) -> int:
|
||||
"""Get the live_update_interval for a specific sport from config."""
|
||||
config = self.config_manager.get_config()
|
||||
sport_config = config.get(f"{sport_key}_scoreboard", {})
|
||||
return sport_config.get("live_update_interval", 30)
|
||||
```
|
||||
|
||||
### Automatic Sport Detection
|
||||
|
||||
The cache manager automatically detects the sport from cache keys:
|
||||
|
||||
```python
|
||||
def get_sport_key_from_cache_key(self, key: str) -> Optional[str]:
|
||||
"""Extract sport key from cache key to determine appropriate live_update_interval."""
|
||||
# Maps cache key patterns to sport keys
|
||||
sport_patterns = {
|
||||
'nfl': ['nfl', 'football'],
|
||||
'nba': ['nba', 'basketball'],
|
||||
'mlb': ['mlb', 'baseball'],
|
||||
'nhl': ['nhl', 'hockey'],
|
||||
'soccer': ['soccer', 'football'],
|
||||
# ... etc
|
||||
}
|
||||
```
|
||||
|
||||
### Configuration Examples
|
||||
|
||||
**Current Configuration (config/config.json):**
|
||||
```json
|
||||
{
|
||||
"nfl_scoreboard": {
|
||||
"live_update_interval": 30,
|
||||
"enabled": true
|
||||
},
|
||||
"soccer_scoreboard": {
|
||||
"live_update_interval": 30,
|
||||
"enabled": false
|
||||
},
|
||||
"mlb": {
|
||||
"live_update_interval": 30,
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Cache Behavior:**
|
||||
- NFL live data: 30-second cache (from config)
|
||||
- Soccer live data: 30-second cache (from config)
|
||||
- MLB live data: 30-second cache (from config)
|
||||
|
||||
### Fallback Strategy
|
||||
|
||||
If configuration is unavailable, the system uses sport-specific defaults:
|
||||
|
||||
```python
|
||||
default_intervals = {
|
||||
'soccer': 60, # Soccer default
|
||||
'nfl': 60, # NFL default
|
||||
'nhl': 60, # NHL default
|
||||
'nba': 60, # NBA default
|
||||
'mlb': 60, # MLB default
|
||||
'milb': 60, # Minor league default
|
||||
'ncaa_fb': 60, # College football default
|
||||
'ncaa_baseball': 60, # College baseball default
|
||||
'ncaam_basketball': 60, # College basketball default
|
||||
}
|
||||
```
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Automatic Sport Detection
|
||||
```python
|
||||
# Cache manager automatically detects NFL and uses nfl_scoreboard.live_update_interval
|
||||
cached_data = cache_manager.get_with_auto_strategy("nfl_live_20241201")
|
||||
|
||||
# Cache manager automatically detects soccer and uses soccer_scoreboard.live_update_interval
|
||||
cached_data = cache_manager.get_with_auto_strategy("soccer_live_20241201")
|
||||
```
|
||||
|
||||
### Manual Sport Specification
|
||||
```python
|
||||
# Explicitly specify sport for custom cache keys
|
||||
cached_data = cache_manager.get_cached_data_with_strategy("custom_live_key", "sports_live")
|
||||
```
|
||||
|
||||
## Benefits
|
||||
|
||||
1. **Configuration-Driven**: Cache respects your sport-specific settings
|
||||
2. **Automatic Detection**: No manual cache duration management needed
|
||||
3. **Sport-Optimized**: Each sport uses its appropriate update interval
|
||||
4. **Backward Compatible**: Existing code continues to work
|
||||
5. **Flexible**: Easy to adjust intervals per sport in config
|
||||
|
||||
## Migration
|
||||
|
||||
The enhanced cache manager is backward compatible. Existing code will automatically benefit from sport-specific intervals without any changes needed.
|
||||
|
||||
To customize intervals for specific sports, simply update the `live_update_interval` in your `config/config.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"nfl_scoreboard": {
|
||||
"live_update_interval": 15 // More aggressive for NFL
|
||||
},
|
||||
"mlb": {
|
||||
"live_update_interval": 45 // Slower pace for MLB
|
||||
}
|
||||
}
|
||||
```
|
||||
1
LEDMatrix.wiki
Submodule
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.9 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 11 KiB |
BIN
assets/broadcast_logos/paramount-plus.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
assets/broadcast_logos/prime.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 4.3 KiB |
BIN
assets/fonts/5by7.regular.ttf
Normal file
21422
assets/fonts/5x8.bdf
Normal file
20768
assets/fonts/6x9.bdf
Normal file
9822
assets/fonts/MatrixChunky8.bdf
Normal file
10180
assets/fonts/MatrixChunky8X.bdf
Normal file
5236
assets/fonts/MatrixLight6.bdf
Normal file
5417
assets/fonts/MatrixLight6X.bdf
Normal file
10184
assets/fonts/MatrixLight8X.bdf
Normal file
9993
assets/fonts/ic8x8u.bdf
Normal file
BIN
assets/news_logos/cbc.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
assets/news_logos/cnn.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
@@ -1,404 +1,53 @@
|
||||
NCAAF
|
||||
AAMU => Alabama A&M Bulldogs
|
||||
ACU => Abilene Christian Wildcats
|
||||
ADA => Adams State Grizzlies
|
||||
ADR => Adrian Bulldogs
|
||||
AFA => Air Force Falcons
|
||||
AIC => American International Yellow Jackets
|
||||
AKR => Akron Zips
|
||||
ALA => Alabama Crimson Tide
|
||||
ALB => Albright Lions
|
||||
ALBS => Albany State (GA) Golden Rams
|
||||
ALCN => Alcorn State Braves
|
||||
ALD => Alderson Broaddus Battlers
|
||||
ALF => Alfred Saxons
|
||||
ALL => Allegheny Gators
|
||||
ALST => Alabama State Hornets
|
||||
AMH => Amherst College Mammoths
|
||||
AND => Anderson (IN) Ravens
|
||||
ANG => Angelo State Rams
|
||||
AMH => Amherst Mammoths
|
||||
ANN => Anna Maria College Amcats
|
||||
APP => Appalachian State Mountaineers
|
||||
APSU => Austin Peay Governors
|
||||
ARIZ => Arizona Wildcats
|
||||
ARK => Arkansas-Monticello Boll Weevils
|
||||
ARMY => Army Black Knights
|
||||
ARST => Arkansas State Red Wolves
|
||||
ASH => Ashland Eagles
|
||||
ASP => Assumption Greyhounds
|
||||
ARK => Arkansas Razorbacks
|
||||
ASU => Arizona State Sun Devils
|
||||
AUB => Auburn Tigers
|
||||
AUG => St. Augustine's Falcons
|
||||
AUR => Aurora Spartans
|
||||
AUS => Austin College 'Roos
|
||||
AVE => Averett Cougars
|
||||
AVI => Avila College Eagles
|
||||
AZU => Azusa Pacific Cougars
|
||||
BAK => Baker University Wildcats
|
||||
BAL => Baldwin Wallace Yellow Jackets
|
||||
BALL => Ball State Cardinals
|
||||
BAT => Bates College Bobcats
|
||||
BAY => Baylor Bears
|
||||
BC => Boston College Eagles
|
||||
BEC => Becker College Hawks
|
||||
BEL => Beloit College Buccaneers
|
||||
BEN => Benedictine University (IL) Eagles
|
||||
BENT => Bentley Falcons
|
||||
BET => Bethel (TN) Wildcats
|
||||
BGSU => Bowling Green Falcons
|
||||
BHS => Black Hills State Yellow Jackets
|
||||
BIR => Birmingham-Southern Panthers
|
||||
BKN => Bacone College Warriors
|
||||
BLA => Blackburn Beavers
|
||||
BLOM => Bloomsburg Huskies
|
||||
BLU => Bluffton Beavers
|
||||
BOW => Bowdoin Polar Bears
|
||||
BRI => British Columbia Thunderbirds
|
||||
BRWN => Brown Bears
|
||||
BST => Bemidji State Beavers
|
||||
BSU => Bowie State Bulldogs
|
||||
BUCK => Bucknell Bison
|
||||
BUE => Buena Vista Beavers
|
||||
BUF => Buffalo State Bengals
|
||||
BUFF => Buffalo Bulls
|
||||
BUT => Butler Bulldogs
|
||||
BYU => BYU Cougars
|
||||
CAL => California Lutheran Kingsmen
|
||||
CAM => Campbell Fighting Camels
|
||||
CAP => Capital University Crusaders
|
||||
CAR => Carthage College Red Men
|
||||
CARK => Central Arkansas Bears
|
||||
CAS => Castleton Spartans
|
||||
CAT => Catholic University Cardinals
|
||||
CCSU => Central Connecticut Blue Devils
|
||||
CCU => Coastal Carolina Chanticleers
|
||||
CEN => Centre College Colonels
|
||||
CHA => Chapman University Panthers
|
||||
CHI => Chicago Maroons
|
||||
CHSO => Charleston Southern Buccaneers
|
||||
CIN => Cincinnati Bearcats
|
||||
CLA => Clarion Golden Eagles
|
||||
CLEM => Clemson Tigers
|
||||
CLMB => Columbia Lions
|
||||
CLT => Charlotte 49ers
|
||||
CMU => Central Michigan Chippewas
|
||||
COE => Coe College Kohawks
|
||||
COL => Colorado School of Mines Orediggers
|
||||
COLC => Colorado College Tigers
|
||||
COLG => Colgate Raiders
|
||||
BOIS => Boise State Broncos
|
||||
BRST => Bridgewater State Bears
|
||||
BUENA => Buena Vista Beavers
|
||||
CAL => California Golden Bears
|
||||
CAR => Carroll University (WI) Pioneers
|
||||
CLA => Claremont-Mudd-Scripps College Stags
|
||||
COLBY => Colby College White Mules
|
||||
COLO => Colorado Buffaloes
|
||||
CON => Concordia-Minnesota Cobbers
|
||||
COR => Cornell College (IA) Rams
|
||||
CONN => UConn Huskies
|
||||
CP => Cal Poly Mustangs
|
||||
CRO => Crown Storm
|
||||
CSU => Colorado State Rams
|
||||
CUL => Culver-Stockton Wildcats
|
||||
CUM => Cumberland College Indians
|
||||
CUR => Curry College Colonels
|
||||
DAK => Dakota Wesleyan Tigers
|
||||
DART => Dartmouth Big Green
|
||||
DAV => Davidson Wildcats
|
||||
DAY => Dayton Flyers
|
||||
DEF => Defiance Yellow Jackets
|
||||
DEL => Delta State Statesmen
|
||||
DEN => Denison Big Red
|
||||
DEP => DePauw Tigers
|
||||
DIC => Dickinson State Blue Hawks
|
||||
DRKE => Drake Bulldogs
|
||||
DSU => Delaware State Hornets
|
||||
DEL => Delaware Blue Hens
|
||||
DUB => Dubuque Spartans
|
||||
DUKE => Duke Blue Devils
|
||||
DUQ => Duquesne Dukes
|
||||
EAS => Eastern New Mexico Greyhounds
|
||||
ECU => East Carolina Pirates
|
||||
EDI => Edinboro Fighting Scots
|
||||
EIU => Eastern Illinois Panthers
|
||||
EKU => Eastern Kentucky Colonels
|
||||
ELI => Elizabeth City State Vikings
|
||||
ELM => Elmhurst Blue Jays
|
||||
ELON => Elon Phoenix
|
||||
EMO => Emory & Henry Wasps
|
||||
EMP => Emporia State Hornets
|
||||
EMU => Eastern Michigan Eagles
|
||||
END => Endicott College Gulls
|
||||
EOR => Eastern Oregon Mountaineers
|
||||
ETSU => East Tennessee State Buccaneers
|
||||
EUR => Eureka College Red Devils
|
||||
EWU => Eastern Washington Eagles
|
||||
FAU => Florida Atlantic Owls
|
||||
FAY => Fayetteville State Broncos
|
||||
FDU => FDU-Florham Devils
|
||||
FER => Ferrum Panthers
|
||||
FIN => Findlay Oilers
|
||||
FIT => Fitchburg State Falcons
|
||||
FIU => Florida International Panthers
|
||||
ELM => Elmhurst Bluejays
|
||||
FAMU => Florida A&M Rattlers
|
||||
FLA => Florida Gators
|
||||
FOR => Fort Valley State Wildcats
|
||||
FRA => Franklin Grizzlies
|
||||
FRES => Fresno State Bulldogs
|
||||
FRO => Frostburg State Bobcats
|
||||
FRST => Ferris State Bulldogs
|
||||
FSU => Florida State Seminoles
|
||||
FTLW => Fort Lewis Skyhawks
|
||||
FUR => Furman Paladins
|
||||
GAL => Gallaudet Bison
|
||||
GAN => Gannon Golden Knights
|
||||
GASO => Georgia Southern Eagles
|
||||
GAST => Georgia State Panthers
|
||||
GEN => Geneva College Golden Tornadoes
|
||||
GEO => George Fox University Bruins
|
||||
GET => Gettysburg Bullets
|
||||
GLE => Glenville State Pioneers
|
||||
GMU => George Mason Patriots
|
||||
GRA => Grand Valley State Lakers
|
||||
GRE => Greenville Panthers
|
||||
GRI => Grinnell Pioneers
|
||||
GRO => Grove City College Wolverines
|
||||
GT => Georgia Tech Yellow Jackets
|
||||
GUI => Guilford Quakers
|
||||
GWEB => Gardner-Webb Bulldogs
|
||||
HAM => Hampden-Sydney Tigers
|
||||
HAMP => Hampton Pirates
|
||||
HAN => Hanover Panthers
|
||||
HAR => Hartwick Hawks
|
||||
HARV => Harvard Crimson
|
||||
HAS => Haskell Indian Nations Jayhawks
|
||||
GTWN => Georgetown Hoyas
|
||||
HAW => Hawai'i Rainbow Warriors
|
||||
HBU => Houston Baptist Huskies
|
||||
HC => Holy Cross Crusaders
|
||||
HEI => Heidelberg Student Princes
|
||||
HEN => Hendrix College Warriors
|
||||
HIL => Hillsdale Chargers
|
||||
HIR => Hiram College Terriers
|
||||
HOB => Hobart Statesmen
|
||||
HOU => Houston Cougars
|
||||
HOW => Howard Bison
|
||||
HUS => Husson Eagles
|
||||
IDHO => Idaho Vandals
|
||||
IDST => Idaho State Bengals
|
||||
ILL => Illinois Fighting Illini
|
||||
ILST => Illinois State Redbirds
|
||||
ILW => Illinois Wesleyan Titans
|
||||
IND => Indianapolis
|
||||
INST => Indiana State Sycamores
|
||||
IOW => Iowa Wesleyan Tigers
|
||||
IOWA => Iowa Hawkeyes
|
||||
ISU => Iowa State Cyclones
|
||||
ITH => Ithaca Bombers
|
||||
IU => Indiana Hoosiers
|
||||
JKST => Jackson State Tigers
|
||||
JMU => James Madison Dukes
|
||||
JOH => Johnson C Smith Golden Bulls
|
||||
JUN => Juniata Eagles
|
||||
JVST => Jacksonville State Gamecocks
|
||||
KAL => Kalamazoo Hornets
|
||||
KAN => Kansas Wesleyan University Coyotes
|
||||
KEN => Kenyon Lords
|
||||
KENN => Kennesaw State Owls
|
||||
KENT => Kent State Golden Flashes
|
||||
KIN => King's College (PA) Monarchs
|
||||
KNO => Knox College Prairie Fire
|
||||
KSU => Kansas State Wildcats
|
||||
KU => Kansas Jayhawks
|
||||
KUT => Kutztown Golden Bears
|
||||
KYST => Kentucky State Thorobreds
|
||||
KYW => Kentucky Wesleyan Panthers
|
||||
LA => La Verne Leopards
|
||||
LAC => Lane Dragons
|
||||
LAF => Lafayette Leopards
|
||||
LAG => LaGrange College Panthers
|
||||
LAK => Lake Forest Foresters
|
||||
LAM => Lambuth Eagles
|
||||
LAN => Langston Lions
|
||||
LAW => Lawrence Vikings
|
||||
LEB => Lebanon Valley Flying Dutchmen
|
||||
LEH => Lehigh Mountain Hawks
|
||||
LEN => Lenoir-Rhyne Bears
|
||||
LEW => Lewis & Clark Pioneers
|
||||
LIB => Liberty Flames
|
||||
LIM => Limestone Saints
|
||||
LIN => Linfield Wildcats
|
||||
LOC => Lock Haven Bald Eagles
|
||||
LOR => Loras College Duhawks
|
||||
LOU => Louisville Cardinals
|
||||
LSU => LSU Tigers
|
||||
LT => Louisiana Tech Bulldogs
|
||||
JXST => Jacksonville State Gamecocks
|
||||
LUT => Luther Norse
|
||||
LYC => Lycoming Warriors
|
||||
M-OH => Miami (OH) RedHawks
|
||||
MAC => Macalester Scots
|
||||
MAI => Maine Maritime Mariners
|
||||
MAN => Mansfield Mountaineers
|
||||
MAR => Maryville College Fighting Scots
|
||||
MAS => Mass Maritime Buccaneers
|
||||
MASS => UMass Minutemen
|
||||
MAY => Mayville State Comets
|
||||
MCM => McMurry War Hawks
|
||||
MCN => McNeese Cowboys
|
||||
MD => Maryland Terrapins
|
||||
MEM => Memphis Tigers
|
||||
MEN => Menlo College Oaks
|
||||
MER => Merchant Marine Mariners
|
||||
MERC => Mercyhurst Lakers
|
||||
MES => Colorado Mesa Mavericks
|
||||
MET => Methodist Monarchs
|
||||
MH => Mars Hill Mountain Lions
|
||||
MIAMI => Miami Hurricanes
|
||||
MICH => Michigan Wolverines
|
||||
MID => Midwestern State Mustangs
|
||||
MIL => Millsaps Majors
|
||||
MIN => Minot State Beavers
|
||||
MINN => Minnesota Golden Gophers
|
||||
MIS => Missouri Western Griffons
|
||||
MISS => Ole Miss Rebels
|
||||
MIZ => Missouri Tigers
|
||||
MNST => Minnesota State Mavericks
|
||||
MONM => Monmouth Hawks
|
||||
MONT => Montana Grizzlies
|
||||
MOR => Morningside Chiefs
|
||||
MORE => Morehead State Eagles
|
||||
MORG => Morgan State Bears
|
||||
MOU => Mount Union Raiders
|
||||
MRSH => Marshall Thundering Herd
|
||||
MRST => Marist Red Foxes
|
||||
MSST => Mississippi State Bulldogs
|
||||
MSU => Michigan State Spartans
|
||||
MTST => Montana State Bobcats
|
||||
MTSU => Middle Tennessee Blue Raiders
|
||||
MTU => Michigan Tech Huskies
|
||||
MUH => Muhlenberg Mules
|
||||
MUR => Murray State Racers
|
||||
MUS => Muskingum Fighting Muskies
|
||||
MVSU => Mississippi Valley State Delta Devils
|
||||
NAU => Northern Arizona Lumberjacks
|
||||
NAVY => Navy Midshipmen
|
||||
NBY => Newberry Wolves
|
||||
NCAT => North Carolina A&T Aggies
|
||||
NCCU => North Carolina Central Eagles
|
||||
NCST => NC State Wolfpack
|
||||
ND => Notre Dame Fighting Irish
|
||||
NDOH => Notre Dame College Falcons
|
||||
NDSU => North Dakota State Bison
|
||||
NEB => Nebraska-Kearney Lopers
|
||||
NEV => Nevada Wolf Pack
|
||||
NH => New Haven Chargers
|
||||
NICH => Nicholls Colonels
|
||||
NIU => Northern Illinois Huskies
|
||||
NMH => New Mexico Highlands Cowboys
|
||||
NMI => Northern Michigan Wildcats
|
||||
NMSU => New Mexico State Aggies
|
||||
NOR => Univ. of Northwestern-St. Paul Eagles
|
||||
NORF => Norfolk State Spartans
|
||||
NW => Northwestern Wildcats
|
||||
OBE => Oberlin Yeomen
|
||||
ODU => Old Dominion Monarchs
|
||||
OHI => Ohio Northern Polar Bears
|
||||
OHIO => Ohio Bobcats
|
||||
OKL => Oklahoma Baptist Bison
|
||||
OKST => Oklahoma State Cowboys
|
||||
OLI => Olivet College Comets
|
||||
OMA => Omaha Mavericks
|
||||
ORST => Oregon State Beavers
|
||||
OSU => Ohio State Buckeyes
|
||||
OTT => Otterbein Cardinals
|
||||
OU => Oklahoma Sooners
|
||||
PAC => Pacific (OR) Boxers
|
||||
PENN => Pennsylvania Quakers
|
||||
PIKE => Pikeville Bears
|
||||
PITT => Pittsburgh Panthers
|
||||
PRE => Presentation College Saints
|
||||
PRI => Principia College Panthers
|
||||
PRIN => Princeton Tigers
|
||||
PST => Pittsburg State Gorillas
|
||||
PSU => Penn State Nittany Lions
|
||||
MESA => Colorado Mesa Mavericks
|
||||
MIL => Millikin Big Blue
|
||||
MOR => Morehouse College Maroon Tigers
|
||||
NOR => North Park Vikings
|
||||
RED => Redlands Bulldogs
|
||||
RICE => Rice Owls
|
||||
RICH => Richmond Spiders
|
||||
RIT => Rochester Yellow Jackets
|
||||
ROB => Robert Morris (IL) Eagles
|
||||
ROS => Rose-Hulman Engineers
|
||||
RUTG => Rutgers Scarlet Knights
|
||||
SAC => Sacramento State Hornets
|
||||
SAG => Saginaw Valley Cardinals
|
||||
SDAK => South Dakota Coyotes
|
||||
SDSU => San Diego State Aztecs
|
||||
SET => Seton Hill Griffins
|
||||
SIU => Southern Illinois Salukis
|
||||
SJSU => San José State Spartans
|
||||
SLI => Slippery Rock The Rock
|
||||
SOU => Southwestern College Moundbuilders
|
||||
SPR => Springfield College Pride
|
||||
ST => St. Scholastica Saints
|
||||
STAN => Stanford Cardinal
|
||||
STE => Stevenson University Mustangs
|
||||
STET => Stetson Hatters
|
||||
STO => Stonehill College Skyhawks
|
||||
SUS => Susquehanna University River Hawks
|
||||
SUU => Southern Utah Thunderbirds
|
||||
SYR => Syracuse Orange
|
||||
TA&M => Texas A&M Aggies
|
||||
TAY => Taylor Trojans
|
||||
TEM => Temple Owls
|
||||
TEX => Texas Longhorns
|
||||
TIF => Tiffin University Dragons
|
||||
TLSA => Tulsa Golden Hurricane
|
||||
TRI => Trinity University (TX) Tigers
|
||||
TUF => Tufts University Jumbos
|
||||
TXST => Texas State Bobcats
|
||||
UAB => UAB Blazers
|
||||
UAPB => Arkansas-Pine Bluff Golden Lions
|
||||
UCD => UC Davis Aggies
|
||||
UCF => UCF Knights
|
||||
UCLA => UCLA Bruins
|
||||
UCONN => UConn Huskies
|
||||
UGA => Georgia Bulldogs
|
||||
UK => Kentucky Wildcats
|
||||
UL => Louisiana Ragin' Cajuns
|
||||
ULM => UL Monroe Warhawks
|
||||
UMD => Minnesota-Duluth Bulldogs
|
||||
UMDA => UMASS Dartmouth Corsairs
|
||||
UML => UMass Lowell River Hawks
|
||||
UNA => North Alabama Lions
|
||||
UNC => North Carolina Tar Heels
|
||||
UNCO => Northern Colorado Bears
|
||||
UND => North Dakota Fighting Hawks
|
||||
UNH => New Hampshire Wildcats
|
||||
UNI => University of Mary Marauders
|
||||
UNLV => UNLV Rebels
|
||||
UNM => New Mexico Lobos
|
||||
UNNY => Union Dutchmen
|
||||
UNT => North Texas Mean Green
|
||||
UPP => Upper Iowa Peacocks
|
||||
URI => Rhode Island Rams
|
||||
USA => South Alabama Jaguars
|
||||
USC => USC Trojans
|
||||
USD => San Diego Toreros
|
||||
USF => South Florida Bulls
|
||||
USU => Utah State Aggies
|
||||
UTAH => Utah Utes
|
||||
UTC => Chattanooga Mocs
|
||||
UTI => Utica College Pioneers
|
||||
UVA => Virginia Cavaliers
|
||||
VAL => Valley City State Vikings
|
||||
VAN => Vanderbilt Commodores
|
||||
VILL => Villanova Wildcats
|
||||
VIR => Virginia State Trojans
|
||||
VT => Virginia Tech Hokies
|
||||
WAB => Wabash College Little Giants
|
||||
WAKE => Wake Forest Demon Deacons
|
||||
WAS => Washington-Missouri Bears
|
||||
WASH => Washington Huskies
|
||||
WAY => Wayne State (MI) Warriors
|
||||
WES => Westminster College (MO) Blue Jays
|
||||
WHE => Wheaton College Illinois Thunder
|
||||
WIL => Wilkes University Colonels
|
||||
WIN => Wingate Bulldogs
|
||||
WIS => Wisconsin-Platteville Pioneers
|
||||
WISC => Wisconsin Badgers
|
||||
WKU => Western Kentucky Hilltoppers
|
||||
WOR => Worcester State College Lancers
|
||||
WSU => Washington State Cougars
|
||||
WVU => West Virginia Mountaineers
|
||||
YALE => Yale Bulldogs
|
||||
|
||||
NBA
|
||||
@@ -1106,6 +755,181 @@ MLB Conferences/Divisions
|
||||
OAK => Oakland Athletics
|
||||
SEA => Seattle Mariners
|
||||
TEX => Texas Rangers
|
||||
|
||||
Soccer Leagues:
|
||||
LEAGUE_SLUGS = {
|
||||
"eng.1": "Premier League",
|
||||
"esp.1": "La Liga",
|
||||
"ger.1": "Bundesliga",
|
||||
"ita.1": "Serie A",
|
||||
"fra.1": "Ligue 1",
|
||||
"uefa.champions": "Champions League",
|
||||
"uefa.europa": "Europa League",
|
||||
"usa.1": "MLS",
|
||||
"por.1": "Liga Portugal", # Add this line
|
||||
}
|
||||
|
||||
Soccer - Premier League (England)
|
||||
ARS => Arsenal
|
||||
AVL => Aston Villa
|
||||
BHA => Brighton & Hove Albion
|
||||
BOU => AFC Bournemouth
|
||||
BRE => Brentford
|
||||
BUR => Burnley
|
||||
CHE => Chelsea
|
||||
CRY => Crystal Palace
|
||||
EVE => Everton
|
||||
FUL => Fulham
|
||||
LIV => Liverpool
|
||||
LUT => Luton Town
|
||||
MCI => Manchester City
|
||||
MUN => Manchester United
|
||||
NEW => Newcastle United
|
||||
NFO => Nottingham Forest
|
||||
SHU => Sheffield United
|
||||
TOT => Tottenham Hotspur
|
||||
WHU => West Ham United
|
||||
WOL => Wolverhampton Wanderers
|
||||
|
||||
Soccer - La Liga (Spain)
|
||||
ALA => Alavés
|
||||
ATH => Athletic Bilbao
|
||||
ATM => Atlético Madrid
|
||||
BAR => Barcelona
|
||||
BET => Real Betis
|
||||
CAG => Cagliari
|
||||
CEL => Celta Vigo
|
||||
ESP => Espanyol
|
||||
GET => Getafe
|
||||
GIR => Girona
|
||||
LAZ => Lazio
|
||||
LEG => Leganés
|
||||
RAY => Rayo Vallecano
|
||||
RMA => Real Madrid
|
||||
SEV => Sevilla
|
||||
VAL => Valencia
|
||||
VLD => Valladolid
|
||||
|
||||
Soccer - Bundesliga (Germany)
|
||||
BOC => VfL Bochum
|
||||
BOL => VfL Bochum
|
||||
DOR => Borussia Dortmund
|
||||
FCA => FC Augsburg
|
||||
FCB => Bayern Munich
|
||||
FCU => FC Union Berlin
|
||||
HAC => Hannover 96
|
||||
HDH => Hertha BSC
|
||||
KOL => 1. FC Köln
|
||||
LEV => Bayer Leverkusen
|
||||
M05 => Mainz 05
|
||||
RBL => RB Leipzig
|
||||
SCF => SC Freiburg
|
||||
SGE => Eintracht Frankfurt
|
||||
STU => VfB Stuttgart
|
||||
SVW => Werder Bremen
|
||||
TSG => TSG Hoffenheim
|
||||
WOB => VfL Wolfsburg
|
||||
|
||||
Soccer - Serie A (Italy)
|
||||
ATA => Atalanta
|
||||
CAG => Cagliari
|
||||
EMP => Empoli
|
||||
FIO => Fiorentina
|
||||
INT => Inter Milan
|
||||
JUV => Juventus
|
||||
LAZ => Lazio
|
||||
MIL => AC Milan
|
||||
MON => Monza
|
||||
NAP => Napoli
|
||||
ROM => Roma
|
||||
TOR => Torino
|
||||
UDI => Udinese
|
||||
VER => Hellas Verona
|
||||
|
||||
Soccer - Ligue 1 (France)
|
||||
LIL => Lille
|
||||
LPM => Lille
|
||||
LYON => Lyon
|
||||
MAR => Marseille
|
||||
MON => Monaco
|
||||
NAN => Nantes
|
||||
NICE => Nice
|
||||
OL => Olympique Lyonnais
|
||||
OM => Olympique de Marseille
|
||||
PAR => Paris Saint-Germain
|
||||
PSG => Paris Saint-Germain
|
||||
REN => Rennes
|
||||
STR => Strasbourg
|
||||
|
||||
Soccer - Champions League
|
||||
AJA => Ajax
|
||||
ASM => AS Monaco
|
||||
ASS => AS Saint-Étienne
|
||||
BOC => VfL Bochum
|
||||
CEL => Celtic
|
||||
COM => Club Brugge
|
||||
FCA => FC Augsburg
|
||||
FCB => Bayern Munich
|
||||
FCU => FC Union Berlin
|
||||
FIO => Fiorentina
|
||||
GEN => Genoa
|
||||
HAC => Hannover 96
|
||||
IPS => Ipswich Town
|
||||
KSV => Kaiserslautern
|
||||
LEC => Lecce
|
||||
LIL => Lille
|
||||
LIV => Liverpool
|
||||
M05 => Mainz 05
|
||||
MCI => Manchester City
|
||||
MUN => Manchester United
|
||||
NAN => Nantes
|
||||
OSA => Osasuna
|
||||
RBL => RB Leipzig
|
||||
RCL => RC Lens
|
||||
RMA => Real Madrid
|
||||
SCF => SC Freiburg
|
||||
SGE => Eintracht Frankfurt
|
||||
SR => Sporting CP
|
||||
STP => St. Pauli
|
||||
SVW => Werder Bremen
|
||||
TFC => Toulouse FC
|
||||
TOT => Tottenham Hotspur
|
||||
TSG => TSG Hoffenheim
|
||||
UDI => Udinese
|
||||
VEN => Venezia
|
||||
VFB => VfB Stuttgart
|
||||
VIL => Villarreal
|
||||
|
||||
Soccer - Liga Portugal (Portugal)
|
||||
ARO => Arouca
|
||||
BEN => SL Benfica
|
||||
BRA => SC Braga
|
||||
CHA => Chaves
|
||||
EST => Estoril Praia
|
||||
FAM => Famalicão
|
||||
GIL => Gil Vicente
|
||||
MOR => Moreirense
|
||||
POR => FC Porto
|
||||
PTM => Portimonense
|
||||
RIO => Rio Ave
|
||||
SR => Sporting CP
|
||||
VGU => Vitória de Guimarães
|
||||
VSC => Vitória de Setúbal
|
||||
|
||||
|
||||
|
||||
Soccer - Other Teams
|
||||
austin => Austin FC
|
||||
cf_montral => CF Montréal
|
||||
charlotte => Charlotte FC
|
||||
dortmund => Borussia Dortmund
|
||||
gladbach => Borussia Mönchengladbach
|
||||
lafc => Los Angeles FC
|
||||
leverkusen => Bayer Leverkusen
|
||||
nycfc => New York City FC
|
||||
paris_sg => Paris Saint-Germain
|
||||
st_louis => St. Louis City SC
|
||||
|
||||
MLS Conferences/Divisions
|
||||
Conferences currently unsupported
|
||||
|
||||
|
||||
BIN
assets/sports/mlb_logos/mlb.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
BIN
assets/sports/ncaa_logos/AANDM.png
Normal file
|
After Width: | Height: | Size: 409 B |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
BIN
assets/sports/ncaa_logos/AIC.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
BIN
assets/sports/ncaa_logos/AMH.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
assets/sports/ncaa_logos/ANN.png
Normal file
|
After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
BIN
assets/sports/ncaa_logos/ARIZ.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
assets/sports/ncaa_logos/ARK.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
BIN
assets/sports/ncaa_logos/ASU.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
assets/sports/ncaa_logos/AUB.png
Normal file
|
After Width: | Height: | Size: 20 KiB |