- Create Economist SubmissionTracking package correctly: * mainArticle = full blog post content * coverLetter = 216-word SIR— letter * Links to blog post via blogPostId - Archive 'Letter to The Economist' from blog posts (it's the cover letter) - Fix date display on article cards (use published_at) - Target publication already displaying via blue badge Database changes: - Make blogPostId optional in SubmissionTracking model - Economist package ID: 68fa85ae49d4900e7f2ecd83 - Le Monde package ID: 68fa2abd2e6acd5691932150 Next: Enhanced modal with tabs, validation, export 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
20 lines
709 B
Python
20 lines
709 B
Python
"""Objects shared by modules in the pptx.opc sub-package."""
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
class CaseInsensitiveDict(dict):
|
|
"""Mapping type like dict except it matches key without respect to case.
|
|
|
|
For example, D['A'] == D['a']. Note this is not general-purpose, just complete
|
|
enough to satisfy opc package needs. It assumes str keys for example.
|
|
"""
|
|
|
|
def __contains__(self, key):
|
|
return super(CaseInsensitiveDict, self).__contains__(key.lower())
|
|
|
|
def __getitem__(self, key):
|
|
return super(CaseInsensitiveDict, self).__getitem__(key.lower())
|
|
|
|
def __setitem__(self, key, value):
|
|
return super(CaseInsensitiveDict, self).__setitem__(key.lower(), value)
|