Catalog PyPI
PACKAGE EXPLORERView in registry

aberdeen

PyPI

Conversion from markdown files to database entries to use as the backend of a blog

blogmarkdownmongodbnosqlpublishing
Versions collected1
Direct dependencies0From release 0.4.0
Last observed20 Oct, 17:20 UTC

README

Version 0.4.0 documentation

Aberdeen
========

Simple python script for taking a directory of markdown files and
generating/storing the backend of a blog.

The goal is to enable quick editing of simple text-files and posting them to a
database via a push to a git branch (default 'publish').

Upon running, a python JSON object is created from each file found. There is a
markdown header extracted from the file indicating post title, date posted,
authors, tags, etc. The content of the post is converted automatically to html
and added to the final object in the path.

The resulting objects (currently) are sent to a MongoDB session and saved to the
specified collection.

This process is strictly a 'model' management system, any view and controller
must be built/managed by you.

(The name comes from the "Aberdeen" fish hook 🎣)

Requirements
------------

- `Python 3.4 <https://www.python.org/>`__
- `Markdown <https://pythonhosted.org/Markdown>`__
- **Supported Databases**
    -  mongodb - `asyncio\_mongo <https://pypi.python.org/pypi/asyncio_mongo>`__

Installation
------------

Copy the ``post-update``, ``aberdeen.py`` and config files to the directory
``hooks`` in the git repository on the server. Edit the config file to your
specifications. This will be updated when uploaded to pypi.

Server Setup
------------

On your server, create a bare git repository, something like 'blog\_data'. This
will simply hold all your markdown (or maybe *other* type) files. Create a
'publish' branch in addition to another 'working' one (presumably 'master'). Add
the post-update webhook and configuration as explained in Installation. Clone
the repo to your working computer.

Usage
-----

This program requires a key-value pair header in each of the markdown files that
have typical elements required for blogging

::

    ---
    title : Post Title
    date  : Mar 15, 2015
    tags  : Example
            Feeling Happy
            XYZ
    author: Me
    ---

    # My New Post
    This is a great post! *All* my markdown works

The 'tags' attribute in this example will generate a list of strings; for more
information on how the metadata header works, `read this
<https://pythonhosted.org/Markdown/extensions/meta_data.html>`__.

Aberdeen creates a python 'time' object from the 'date' attribute. It will try
to be smart about the style of the date, and there are a few ways to interpret
the datetime from the string, but it has to be accepted in some form or another
by the `strptime
<https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior>`__
function of python ‘time’ library. The first way to work will be saved, so it
rewards consistency. It is recommended you put in a time field if you care about
that, else it will default to midnight of the determined date.

*Maybe this can be specified in the config file? (that's not implemented yet.)*

This kind of information is great for storing in NoSQL databases, so MongoDB is
the only database currently supported. The content of the markdown is converted
to HTML and added to the result as 'html\_content' field. The objects are sorted
in terms of date and written to the database. The previous table or collection
will dropped and the new items added. (***NO GUARANTEE*** that the items will be
in the same order).

Other Things
------------

Remeber this does not have any HTML structure or view-support for a blog. This
strictly converts one form of a model (markdown files) to another (database
entries). The view/controllers are totally up to you for retreiving and
displaying the posts.

Always assume that the database collection/table will be **erased** upon every
push. The idea is the database reflects the files, so changing a file will
replace that entry in the database. It is recommended to NOT use fixed links to
posts. It is suggested to used date+title as a unique identifier. Alternatively,
you could store a unique post id in the metadata field, if you want some
assurance that things will be fixed (but it's up to you to keep track of the and
their uniqueness).

LICENSE
-------

Apache 2.0

Downloads & popularity

3downloads
1-day window · source-reported counts20 Oct 2026
2713.50
2026-07-23: 2 · observed 2026-10-21T09:44:50.9611346Z · period 2026-07-23–2026-07-232026-07-24: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-07-24–2026-07-242026-07-28: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-07-28–2026-07-282026-07-29: 12 · observed 2026-10-21T09:44:50.9611346Z · period 2026-07-29–2026-07-292026-08-01: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-01–2026-08-012026-08-02: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-02–2026-08-022026-08-03: 9 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-03–2026-08-032026-08-04: 7 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-04–2026-08-042026-08-05: 5 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-05–2026-08-052026-08-06: 5 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-06–2026-08-062026-08-09: 4 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-09–2026-08-092026-08-14: 3 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-14–2026-08-142026-08-17: 4 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-17–2026-08-172026-08-18: 27 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-18–2026-08-182026-08-19: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-19–2026-08-192026-08-20: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-20–2026-08-202026-08-24: 2 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-24–2026-08-242026-08-26: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-26–2026-08-262026-08-30: 4 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-30–2026-08-302026-08-31: 2 · observed 2026-10-21T09:44:50.9611346Z · period 2026-08-31–2026-08-312026-09-03: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-09-03–2026-09-032026-09-06: 3 · observed 2026-10-21T09:44:50.9611346Z · period 2026-09-06–2026-09-062026-09-08: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-09-08–2026-09-082026-09-09: 2 · observed 2026-10-21T09:44:50.9611346Z · period 2026-09-09–2026-09-092026-09-10: 2 · observed 2026-10-21T09:44:50.9611346Z · period 2026-09-10–2026-09-102026-09-12: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-09-12–2026-09-122026-09-21: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-09-21–2026-09-212026-09-22: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-09-22–2026-09-222026-09-24: 4 · observed 2026-10-21T09:44:50.9611346Z · period 2026-09-24–2026-09-242026-09-25: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-09-25–2026-09-252026-09-26: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-09-26–2026-09-262026-09-27: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-09-27–2026-09-272026-09-29: 2 · observed 2026-10-21T09:44:50.9611346Z · period 2026-09-29–2026-09-292026-09-30: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-09-30–2026-09-302026-10-01: 3 · observed 2026-10-21T09:44:50.9611346Z · period 2026-10-01–2026-10-012026-10-02: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-10-02–2026-10-022026-10-06: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-10-06–2026-10-062026-10-08: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-10-08–2026-10-082026-10-09: 2 · observed 2026-10-21T09:44:50.9611346Z · period 2026-10-09–2026-10-092026-10-10: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-10-10–2026-10-102026-10-13: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-10-13–2026-10-132026-10-14: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-10-14–2026-10-142026-10-15: 4 · observed 2026-10-21T09:44:50.9611346Z · period 2026-10-15–2026-10-152026-10-16: 2 · observed 2026-10-21T09:44:50.9611346Z · period 2026-10-16–2026-10-162026-10-17: 1 · observed 2026-10-21T09:44:50.9611346Z · period 2026-10-17–2026-10-172026-10-19: 2 · observed 2026-10-21T09:44:50.9611346Z · period 2026-10-19–2026-10-192026-10-20: 3 · observed 2026-10-21T09:44:50.9611346Z · period 2026-10-20–2026-10-20
23 Jul20 Oct

pypistats · 47 observations shown. Missing days are unknown. Source category: overall: without mirrors.

View observed values
Date / source periodValueObserved at
2026-10-20 – 2026-10-2032026-10-21T09:44:50.9611346Z
2026-10-19 – 2026-10-1922026-10-21T09:44:50.9611346Z
2026-10-17 – 2026-10-1712026-10-21T09:44:50.9611346Z
2026-10-16 – 2026-10-1622026-10-21T09:44:50.9611346Z
2026-10-15 – 2026-10-1542026-10-21T09:44:50.9611346Z
2026-10-14 – 2026-10-1412026-10-21T09:44:50.9611346Z
2026-10-13 – 2026-10-1312026-10-21T09:44:50.9611346Z
2026-10-10 – 2026-10-1012026-10-21T09:44:50.9611346Z
2026-10-09 – 2026-10-0922026-10-21T09:44:50.9611346Z
2026-10-08 – 2026-10-0812026-10-21T09:44:50.9611346Z
2026-10-06 – 2026-10-0612026-10-21T09:44:50.9611346Z
2026-10-02 – 2026-10-0212026-10-21T09:44:50.9611346Z
2026-10-01 – 2026-10-0132026-10-21T09:44:50.9611346Z
2026-09-30 – 2026-09-3012026-10-21T09:44:50.9611346Z
2026-09-29 – 2026-09-2922026-10-21T09:44:50.9611346Z
2026-09-27 – 2026-09-2712026-10-21T09:44:50.9611346Z
2026-09-26 – 2026-09-2612026-10-21T09:44:50.9611346Z
2026-09-25 – 2026-09-2512026-10-21T09:44:50.9611346Z
2026-09-24 – 2026-09-2442026-10-21T09:44:50.9611346Z
2026-09-22 – 2026-09-2212026-10-21T09:44:50.9611346Z
2026-09-21 – 2026-09-2112026-10-21T09:44:50.9611346Z
2026-09-12 – 2026-09-1212026-10-21T09:44:50.9611346Z
2026-09-10 – 2026-09-1022026-10-21T09:44:50.9611346Z
2026-09-09 – 2026-09-0922026-10-21T09:44:50.9611346Z
2026-09-08 – 2026-09-0812026-10-21T09:44:50.9611346Z
2026-09-06 – 2026-09-0632026-10-21T09:44:50.9611346Z
2026-09-03 – 2026-09-0312026-10-21T09:44:50.9611346Z
2026-08-31 – 2026-08-3122026-10-21T09:44:50.9611346Z
2026-08-30 – 2026-08-3042026-10-21T09:44:50.9611346Z
2026-08-26 – 2026-08-2612026-10-21T09:44:50.9611346Z
2026-08-24 – 2026-08-2422026-10-21T09:44:50.9611346Z
2026-08-20 – 2026-08-2012026-10-21T09:44:50.9611346Z
2026-08-19 – 2026-08-1912026-10-21T09:44:50.9611346Z
2026-08-18 – 2026-08-18272026-10-21T09:44:50.9611346Z
2026-08-17 – 2026-08-1742026-10-21T09:44:50.9611346Z
2026-08-14 – 2026-08-1432026-10-21T09:44:50.9611346Z
2026-08-09 – 2026-08-0942026-10-21T09:44:50.9611346Z
2026-08-06 – 2026-08-0652026-10-21T09:44:50.9611346Z
2026-08-05 – 2026-08-0552026-10-21T09:44:50.9611346Z
2026-08-04 – 2026-08-0472026-10-21T09:44:50.9611346Z
2026-08-03 – 2026-08-0392026-10-21T09:44:50.9611346Z
2026-08-02 – 2026-08-0212026-10-21T09:44:50.9611346Z
2026-08-01 – 2026-08-0112026-10-21T09:44:50.9611346Z
2026-07-29 – 2026-07-29122026-10-21T09:44:50.9611346Z
2026-07-28 – 2026-07-2812026-10-21T09:44:50.9611346Z
2026-07-24 – 2026-07-2412026-10-21T09:44:50.9611346Z
2026-07-23 – 2026-07-2322026-10-21T09:44:50.9611346Z

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.4.03 Apr 20150

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

ACCESSIBLE
akubera/aberdeen

Shared repository data · GitHub

License detected in repository
Apache-2.0
License branch / ref
dev
Last push
25 Jan 2017
Archived
No
Contributor identities
— · partial collection

Public sponsor counts have not been collected. These signals belong to the repository owner.

Downloads & popularity

0count
Gauge · observed snapshots21 Oct 2026
10.50
2026-10-21: 0 · observed 2026-10-21T17:50:30.7511468Z
21 Oct21 Oct

github · 1 observations shown. Missing days are unknown.

View observed values
Date / source periodValueObserved at
2026-10-2102026-10-21T17:50:30.7511468Z

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 17:20 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:27b8aadef6f5f6666f2cbf1541ad43a2406439310e1f3befc3d7c4345839f8a2