Python library for managing MOS running orders. Pronounced mos-ro-manager.
The library provides functionality for classifying MOS file types, processing
and inspecting MOS message files, as well as merging MOS files into a running
order, and providing a “completed” programme including all additions and changes
made between the first message (
roCreate) and the last (
This can be used as a library, using the utilities provided in the mosromgr module, and the command line command CLI can be used to process either a directory of MOS files, or a folder within an S3 bucket.
This library was developed by the BBC News Labs team.
Note that the library is currently in beta. The API and CLI are not yet stable and may change. Once the library reaches v1.0, it will be considered stable. Please consider giving Feedback to help stabilise the API.
List the stories within a running order:
$ mosromgr inspect -f roCreate.mos.xml --stories 0828 MIDLANDS TODAY Wed, 11.11.2020 INTRODUCTION-READ TESTING-OOV WEATHER-SHORT END OF PROGRAMME
Merge all MOS files in directory newsnight and save in
$ mosromgr merge -f newsnight/* -o FINAL.xml
roCreate file and view its stories:
from mosromgr.mostypes import RunningOrder ro = RunningOrder.from_file('roCreate.mos.xml') for story in ro.stories: print(story.slug)
from mosromgr.mostypes import RunningOrder, StorySend ro = RunningOrder.from_file('roCreate.mos.xml') ss = StorySend.from_file('roStorySend.mos.xml') ro += ss with open('final.mos.xml', 'w') as f: f.write(str(ro))
If you’re automating this process you won’t necessarily know which MOS Type to
use, so you can construct an object from the base class
MosFile which will automatically classify your
>>> from mosromgr.mostypes import MosFile >>> mf1 = MosFile.from_file('roCreate.mos.xml') >>> mf1 <RunningOrder 1000> >>> mf2 = MosFile.from_file('roStorySend.mos.xml') >>> mf2 <StorySend 1001>
MosCollection will sort and classify
multiple MOS types of all given files, allowing you to process a collection of
MOS files within a complete or partially complete programme:
from mosromgr.moscollection import MosCollection mos_files = ['roCreate.mos.xml', 'roStorySend.mos.xml', 'roDelete.mos.xml'] mc = MosCollection.from_files(mos_files) mc.merge() with open('final.mos.xml', 'w') as f: f.write(str(mc))
This documentation follows the Diátaxis system, so is split between four modes of documentation: tutorials, how-to guides, technical reference and explanation.
Issues and questions¶
Source code can be found on GitHub at github.com/bbc/mosromgr.
Contributions are welcome. Please refer to the contributing guidelines.