Testing Out Tags!

Published on 09/20/19 at 10:15 EST by Max Bridgland


I've just implemented tags to my blog posts!

These tags work by displaying a hashtag at the bottom of a blog post which you can then click on and find other blog posts with the same tags. I'm still working out the kinks but it will basically just use that tag as a search query, so any blogs with that word in it or that tag will show up! Test it out and comment if it's working for you :) - Max


Just How Easy Migrations Are With Redis

Published on 09/19/19 at 22:25 EST by Max Bridgland


I came to a conclusion that the home page of this blog had posts that were much too long. I needed to change it so that it would only display X characters and then a show more button linking to the blog post. Below is a migration script I wrote showing just how easy it was to convert my old db values to new ones.

def convert_home_html_to_new_format():
    home_post_body = """\
          <div class="card">
            <div class="card-content">
              <div class="media">
                <div class="media-content">
                  <p class="title is-4"><a href="https://blog.maxbridgland.com/blog/{direct_url}">{title}</a></p>
                  <p class="subtitle is-6">{upload_date} by {name}</p>
                </div>
              </div>
              <div class="content">
                <hr>
                  {content}
                <center><a href="https://blog.maxbridgland.com/blog/{direct_url}">Show More</a></center>
              </div>
            </div>
          </div>"""
    all_keys = db.keys()
    keys = []
    for key in all_keys:
        if len(key) < 5:
            keys.append(key)
    for key in keys:
        obj = json.loads(bytes(db.get(key)).decode('utf-8'))
        content = obj['content']
        title = obj['title']
        upload_date = obj['upload_date']
        new_key = str(key).replace('b', '').replace("'", '')
        obj['home_html'] = home_post_body.format(title=title, upload_date=upload_date, content=markdown(content[:120] + "......", extras=["fenced-code-blocks"]), name=app.config['name'], direct_url=new_key)
        db.set(key, json.dumps(obj))

Let's go through and analyze what this function is doing. First I have a formatted HTML string that I will use to generate the card on my site. This HTML is updated compared to what we used to have. After that I pull all my keys from the db and grab all blog keys. I use len(key) < 5 to check that the key is not a long string like the keys I don't want in my db (one of the flaws I've found with Redis is that you can't have "collections" like in MongoDB). I iterate over those keys and append them to a new list with just the blog keys. Then I iterate over that and grab the value from the db. They are all json strings so i load those string with the json module into a Python object. I then modify this python object and reset the key in the database. Ez Pz Migration :)