Skip to content

Instantly share code, notes, and snippets.

@seansummers
Last active September 8, 2024 14:19
Show Gist options
  • Save seansummers/beae40e866987f0299f7cae29e97fd57 to your computer and use it in GitHub Desktop.
Save seansummers/beae40e866987f0299f7cae29e97fd57 to your computer and use it in GitHub Desktop.
Utility Functions in Python
from collections import UserDict
class CaseInsensitiveDict(UserDict):
"""Dict that preserves key case, but will compare and set insensitively.
>>> 'test' in CaseInsensitiveDict({'Test':'value'})
True
>>> CaseInsensitiveDict({'Test':'value'})['teSt']
'value'
>>> d = CaseInsensitiveDict({'Test':'value'})
>>> d['TeST'] = 'another value'
>>> d
{'Test': 'another value'}
"""
def _resolve_canonical_key(self, key) -> Any:
if key not in self.data and isinstance(key, str):
key_ = key.casefold()
for data_key in self.data:
if key_ == data_key.casefold():
return data_key
return key
def __contains__(self, key) -> bool:
return self._resolve_canonical_key(key) in self.data
def __getitem__(self, key: Any) -> Any:
return self.data[self._resolve_canonical_key(key)]
def __setitem__(self, key: Any, item: Any) -> None:
self.data[self._resolve_canonical_key(key)] = item
from datetime import datetime
def isoformat_to_millis(scheduled_time: str) -> int:
"""Convert ISO datetime into millis
>>> isoformat_to_millis("2022-03-22T18:59:43Z")
1647975583000
"""
return round(
datetime.fromisoformat(scheduled_time).timestamp()
* 1000
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment