Skip to content

Instantly share code, notes, and snippets.

View revant's full-sized avatar

Revant Nandgaonkar revant

View GitHub Profile
@revant
revant / file_uploader.js
Last active April 18, 2025 00:30
Multi Part Upload for Frappe
// Copyright (c) 2025, Revant Nandgaonkar and contributors
// License: MIT
// HTML Field has following options
// <div id="dropzoneTarget" class="fallback dropzone"> <input hidden name="file" type="file"> </div>
frappe.ui.form.on('File Uploader', {
refresh(frm) {
const url = '/api/method/multipart_upload.upload.multipart_file_upload';
const chunkSize = 20 * 1024 * 1024; // 20MB
@revant
revant / Dockerfile
Last active March 20, 2025 09:45
K3s in VS Code Devcontainer
FROM debian:bookworm-slim
COPY entrypoint.sh /entrypoint.sh
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
locales \
ca-certificates \
curl \
sudo \
@revant
revant / NOTES.md
Last active March 3, 2025 01:56
Advance frappe benches with Dokploy
@revant
revant / digital_signature.py
Created October 11, 2024 05:54
Frappe Framework and PyHanko digital signatures
# License: MIT
# Store signatures in "Digital Signature"
# it uploads signatures on S3 for secure storage.
# Code snippet to fetch signature and sign document
import io
import os
import ntpath
import boto3
import botocore.exceptions
@revant
revant / mqtt.js
Last active June 20, 2024 13:36
MQTT Sub nodejs
const mqtt = require("mqtt");
const client = mqtt.connect("mqtt://event-bus:1883", {
clientId: require('crypto').randomUUID(),
clean: true,
connectTimeout: 4000,
username: 'emqx',
password: 'public',
reconnectPeriod: 1000,
});
client.on('connect', () => {
@revant
revant / smtp.py
Last active November 3, 2023 14:18
Python SMTPServer
# https://github.com/frappe/frappe/blob/develop/frappe/email/smtp.py
import smtplib
class SMTPServer:
def __init__(
self,
server,
login=None,
password=None,
def terminal_websocket(name: str, namespace: str, command: list[str], container: str = None):
load_config()
core_v1_api = client.CoreV1Api()
resp = stream(
core_v1_api.connect_get_namespaced_pod_exec,
name=name,
namespace=namespace,
container=container,
command=command,
stderr=True,
@revant
revant / README.md
Last active December 14, 2022 17:23
gcloud in container

Start Container:

docker run --rm -it \
  -v $PWD/data/gcloud:/root \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e "TERM=xterm-256color" google/cloud-sdk:alpine sh

Prepare Container:

@revant
revant / README.md
Last active March 10, 2025 11:23
Frappe/ERPNext version 14 on RHEL 8

Download and install offline

# for centos:8 docker container refer https://stackoverflow.com/a/70930049
# yum install yum-utils # installs yumdownloader
# yumdownloader --assumeyes --destdir=$HOME/downloads/rpms --resolve {package-name}
sudo yum install -y --cacheonly --disablerepo=* $HOME/downloads/rpms/*.rpm
# Following command needs Python 3.10 installed. Refer Section below
sudo pip3.10 install --no-index --find-links file:$HOME/downloads/pip frappe-bench 
@revant
revant / pwd.yml
Last active January 7, 2023 14:30
ERPNext version-14 Play With Docker
version: "3"
services:
backend:
image: frappe/erpnext:v14.12.0
deploy:
restart_policy:
condition: on-failure
volumes:
- sites:/home/frappe/frappe-bench/sites