Flow is the new communication extension for MediaWiki, see https://www.mediawiki.org/wiki/Flow. It is not supported by Pywikibot.
See T86571: [1] O6. Schedule and prepare "Update bots to handle Flow boards" workshop for Dev Summit for notes from the devsummit.
See https://www.mediawiki.org/wiki/Flow/Pages#Engineers_.28technical_notes.29 for links to all documentation (API etc.).
The concepts in Flow need to be implemented as python classes, inheriting from the pywikibot base class BasePage for objects which exhibit 'mediawiki page' like functionality. It may be sufficient to copy the classes from PHP, however it is likely that some remodelling will be needed to mesh Flow concepts into pywikibot.
To complete this task, unit tests must be added to the test suite to interact with test Flow pages on a Flow enabled Wikimedia site (e.g. MediaWiki.org). The tests should include interacting with Flow objects using the Flow specific functionality, and interacting with the same pages using the standard Page functionality where appropriate.
The unit test should be configured to run on travis-ci, and Flow related tests run when the test site has Flow enabled, and Flow related tests be skipped when Flow isn't installed.
If time allows, the Flow support should include server version tracking, so Flow features can easily be enabled/disabled as the Flow extension is enhanced. (T110046)
GSOC Plan (based on T93991); will be updated
Goals
Obviously, I want to have working code in Pywikibot that can interface with Flow objects through the MediaWiki API by the end of the coding period. But doing that would have to involve learning the codebases of both Pywikibot and Flow, learning and using the testing system, and figuring out the API.
During this project, I hope to:
- Establish working relationships with the Pywikibot and Flow teams.
- Learn prerequisites, including the MW API, Travis-CI and the testing framework, and the respective codebases and conventions of Pywikibot and Flow.
- Create an initial implementation of Flow support in Pywikibot.
- Test frequently, including in live testing environments and using Flow-specific and generic constructs where appropriate.
- Finish a stable implementation of Flow support in Pywikibot.
- If time allows, add a version-tracking construct to enable/disable specific Flow features as appropriate.
Time
I start my summer around May 18, so I can certainly start work by then. I will start my prerequisite research and community outreach sooner than that, having it completed by the start of the coding period. I will have an initial implementation completed by the midterm evaluations, with intensive testing and bug squashing planned for the second half. I plan on documenting the code throughout the process, with the ideal goal of writing and commenting code simultaneously and writing any necessary formal documentation at major stopping points. The end of my summer vacation should be the last week-or-so of August. I will fill in any other needed details later.
Detailed timeline
Before May 25 | Communication with Flow and Pywikibot teams; research into architectures; learning any requisite technologies; finalizing plan |
May 25 - June 7 | Creating new classes for Flow objects and achieving a partial implementation |
June 8 - June 21 | Completing initial implementation of Flow mappings |
June 22 - June 28 | Documenting new code |
June 26 - July 3 | Midterms |
July 4 - July 15 | Writing new unit tests |
July 16 - July 26 | Fixing bugs found with unit tests; finalizing mapping code |
July 27 - August 2 | Adding version capability |
August 3 - August 9 | Additional thorough testing and documentation writing |
August 10 - August 17 | Buffer for any possible overruns |
August 18 - August 23 | Final evaluations |
August 24 | Start of semester |
- Primary mentor: @jayvdb
- Co-mentor: @Mattflaschen
- Estimated time required by a senior contributor: 3 weeks
- Skills needed: OOD, Python, PHP, MediaWiki API, Travis-CI
- Microtasks:
- (PHP) Any good first task task in StructuredDiscussions, such as T69000.
- (python) Any task in Pywikibot that relates to the Page classes (such as T57113, T57155, T73817), or APISite or ParamInfo classes.