Skip to content

Instantly share code, notes, and snippets.

View archatas's full-sized avatar

Aidas Bendoraitis archatas

View GitHub Profile
@archatas
archatas / settings.py
Created July 29, 2024 16:45
get_secret() function that uses a JSON file for Django project secrets
import os
import json
from django.core.exceptions import ImproperlyConfigured
with open(os.path.join(os.path.dirname(__file__), "secrets.json"), "r") as f:
secrets = json.loads(f.read())
def get_secret(setting):
@archatas
archatas / example.html
Created July 16, 2024 23:28
Implementation of a field reset based on a default value from a URL path
<div class="form-field">
<label for="title">Title</label>
<input type="text" id="title" />
<button type="button"
class="reset_field"
data-url="http://example.com/default-title/"
data-target="#title"
>Reset title</button>
</div>
@archatas
archatas / dynamic_inclusion_tag.py
Created July 14, 2024 12:36
A Django template tag decorator for including a dynamically set template with context variables
from functools import wraps
from inspect import getfullargspec, unwrap
from django import template
register = template.Library()
def dynamic_inclusion_tag(filename=None, func=None, takes_context=None, name=None):
"""
@archatas
archatas / validators.py
Last active May 18, 2024 23:31
CSS Color Validator for Django models and forms
import re
from django.core.exceptions import ValidationError
def validate_css_color(value):
"""
Custom validation function for background color field.
Args:
value (str): The value entered for the background color field.
@archatas
archatas / base.html
Created May 4, 2024 22:48
Boilerplate base.html template inspired by django-allauth
{% load i18n %}
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
{% block head_title %}
{% endblock head_title %}
</title>
@archatas
archatas / combine_js.sh
Created April 29, 2024 16:48
A bash script combining remote and local JS files into one
#!/usr/bin/env bash
CURRENT_DIR=$(dirname "$0")
BASE_DIR=$CURRENT_DIR/../../..
# Define output filename
OUTPUT_FILE="$BASE_DIR/site_static/site/js/combined.js"
echo "" > $OUTPUT_FILE
@archatas
archatas / pagination.html
Created April 28, 2024 18:23
Pagination widget using TailwindCSS markup
{% load query_params_tags %}
<div class="grid md:grid-cols-12 grid-cols-1 mt-8">
<div class="md:col-span-12 text-center">
<nav aria-label="Page navigation example">
<ul class="inline-flex items-center -space-x-px">
{% if page_obj.has_previous %}
<li><a href="{% modify_query page=page_obj.previous_page_number %}" class="size-[40px] inline-flex justify-center items-center text-slate-400 bg-white dark:bg-slate-900 rounded-s-3xl hover:text-white border border-gray-100 dark:border-gray-800 hover:border-sky-600 dark:hover:border-sky-600 hover:bg-sky-600 dark:hover:bg-sky-600"><i class="uil uil-angle-left text-[20px] rtl:rotate-180 rtl:-mt-1"></i></a></li>
{% if page_obj.number > 3 %}
<li><a href="{% modify_query page=1 %}" class="size-[40px] inline-flex justify-center items-center text-slate-400 hover:text-white bg-white dark:bg-slate-900 border border-gray-100 dark:border-gray-800 hover:border-sky-600 dark:hove
@archatas
archatas / decorators.py
Created April 19, 2024 07:46
The @basic_authentication decorator for Django views
import base64
from functools import wraps
from django.conf import settings
from django.http import HttpResponse
from django.utils.encoding import force_str
def basic_authentication(function):
@wraps(function)
def wrap(request, *args, **kwargs):
@archatas
archatas / build.sh
Last active February 14, 2024 10:50
Interactive build bash script for releasing Python packages
#!/bin/bash
echo "Did you update the CHANGELOG.md and commit the changes? (y/N)"
read answer
if [[ $answer != "y" && $answer != "Y" ]]; then
echo "Please update and commit the changelog before building."
exit 1
fi
@archatas
archatas / replace_version.sh
Created February 10, 2024 20:18
Replaces semantic versions in the documentation written in Markdown format.
#!/bin/bash
# Get old and new versions
read -p "Enter old software version (major.minor.patch): " old_version
read -p "Enter new software version (major.minor.patch): " new_version
# Check if versions are valid
if ! [[ $old_version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ || $new_version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Invalid version format. Please enter in major.minor.patch format."
exit 1