mosromgr
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.
Usage
Command line
List the stories within a running order:
.. code-block:: console
$ 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 FINAL.xml
:
.. code-block:: console
$ mosromgr merge -f newsnight/* -o FINAL.xml
Library
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))
Documentation
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.