Usually DSO catalogs are pretty static and rarely change due to the
nature of their contents. But although galaxies do not tend to jump
around in the sky, catalogs still get updates to correct typos or
update coordinates with more precise measurement. Our primary catalog
[OpenNGC](https://github.com/mattiaverga/OpenNGC) for example gets updates quite regularly.
{{<figuresrc="/images/GSOC:_Second_Coding_Period;_Some_Notes_on_the_Catalog_Repo./2021-08-08_12-21-27_screenshot.png"caption="Figure 1: OpenNGC is being updated regularly.">}}
And even though a catalog might not change, it would nevertheless be
desirable to have a record on how it was derived from its original
format in a _reproducible_ way[^fn:1]. Last but not least, having all catalogs in a
central place in kind of the same format would make deduplication a
lot easier.
The question is: how does one define a convenient yet flexible format
that nevertheless enforces some kind of structure? My answer was: with
some kind of package definition. What about the flexibility part?
Well, basically every catalog is just a python module that must
implement a class. By overwriting certain methods, the catalog can be
built up. The framework provides certain support functionality and an
interface to some catalog database features by way of a python binding
to some `KStars` code. Apart from that one has complete freedom in
implementing the details although some conventions should be
followed[^fn:2].
A simple random catalog looks like the following listing.