Convert the remaining straightforward imports/ scripts to class-based importers using BaseImporter in src/lifestream/importers/.
These have API key or simple login auth — no OAuth flows to untangle.
Files
| File |
Auth |
Notes |
imports/ffxiv.py |
API key (xivapi) |
Already has good structure |
imports/atproto_posts.py |
username/password login |
Already refactored in #62 |
imports/instagram.py |
username/password login |
Uses unofficial InstagramAPI |
imports/gw2.py |
API key |
Already has run_import()/main() structure |
imports/oyster.py |
None (mechanize scraping) |
Takes args from CLI |
imports/oyster_csv.py |
None (CSV) |
Trivial |
Pattern
Each conversion should:
- Create
src/lifestream/importers/<name>.py with a class XImporter(BaseImporter)
- Move config loading to
get_config() calls
- Replace
sys.exit() with ConfigurationError
- Add a
main() entry point and wire up pyproject.toml
- Delete the old
imports/<name>.py
Convert the remaining straightforward
imports/scripts to class-based importers usingBaseImporterinsrc/lifestream/importers/.These have API key or simple login auth — no OAuth flows to untangle.
Files
imports/ffxiv.pyxivapi)imports/atproto_posts.pyimports/instagram.pyInstagramAPIimports/gw2.pyrun_import()/main()structureimports/oyster.pyimports/oyster_csv.pyPattern
Each conversion should:
src/lifestream/importers/<name>.pywith aclass XImporter(BaseImporter)get_config()callssys.exit()withConfigurationErrormain()entry point and wire uppyproject.tomlimports/<name>.py