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 (roDelete
).
This can be used as a library, using the utilities provided in the mosromgr
module, and the command line command mosromgr
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.
Inspect a MOS file:
$ mosromgr inspect -f 53783448-roStoryReplace.mos.xml
53783448-roStoryReplace.mos.xml: StoryReplace
REPLACE STORY: OM_5.765650;OM_5.765654,5.765650.7 WITH:
STORY: OM_5.765650;OM_5.765654,5.765650.7
Merge all MOS files in directory newsnight and save in FINAL.xml
:
$ mosromgr merge -f newsnight/* -o FINAL.xml
Load a 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)
Merge a single roStorySend
into a roCreate
and output the file to a new
file:
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 file:
>>> 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>
Using 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))
Comprehensive documentation is provided at https://mosromgr.readthedocs.io/
The documentation follows the Diátaxis system, so is split between four modes of documentation: tutorials, how-to guides, technical reference and explanation.
Questions can be asked on the discussion board, and issues can be raised on the issue tracker.
Source code can be found on GitHub at github.com/bbc/mosromgr.
Contributions are welcome. Please refer to the contributing guidelines.
Licensed under the Apache License, Version 2.0.
To get in touch with the maintainers, please contact the BBC News Labs team: bbcnewslabsteam@bbc.co.uk