Skip to content

Instantly share code, notes, and snippets.

View tiagocoutinho's full-sized avatar

Jose Tiago Macara Coutinho tiagocoutinho

View GitHub Profile
@tiagocoutinho
tiagocoutinho / yield.py
Created October 15, 2025 15:09
TCP client CLI with yield example in python
import socket
def make_stream(addr):
c = socket.create_connection(("0",5001))
print("Connected!")
reply = c
while True:
request = yield reply
if not request.strip():
break
@tiagocoutinho
tiagocoutinho / fastapi_htmx.py
Created June 11, 2025 08:18
HTMX + FastAPI
from functools import partial
from typing import Annotated
from fastapi import responses, FastAPI, Form
FormField = Annotated[str, Form()]
app = FastAPI()
get_html = partial(app.get, response_class=responses.HTMLResponse)
put_html = partial(app.put, response_class=responses.HTMLResponse)
@tiagocoutinho
tiagocoutinho / client.py
Last active September 25, 2024 08:06
read temp periodically
import time
import socket
def temp_stream():
with socket.create_connection(("localhost", 10_123)) as sock:
sockfd = sock.makefile("rwb", buffering=1)
while True:
sockfd.write(b"TEMP?\n")
payload = sockfd.readline()
yield float(payload)
@tiagocoutinho
tiagocoutinho / echo_server_single_client.py
Last active August 29, 2024 14:43
python single client echo server accept
import socket
import select
serv = socket.create_server(("", 10_010))
readers = {serv}
while True:
ready, _, _ = select.select(readers, (), ())
if serv in ready:
client, addr = serv.accept()
@tiagocoutinho
tiagocoutinho / random_name.py
Last active April 5, 2024 04:45
Generate random name in python
import random
import string
ascii_alphanumeric = string.ascii_letters + string.digits
def random_name(min_length=32, max_length=32):
if not (k := random.randint(min_length, max_length)):
return ""
first = random.choice(string.ascii_letters)
return first + "".join(random.choices(ascii_alphanumeric, k=k-1))
@tiagocoutinho
tiagocoutinho / test_fixture_run_once_xdist.py
Created May 18, 2023 12:59
Ensure a fixture runs once when using pytest-xdist and other workers wait for it to finish
"""
$ pip install posix_ipc pytest pytest-xdist
$ pytest -s -v -n 4 test_fixture_run_once_xdist.py
"""
import inspect
import logging
import time
@tiagocoutinho
tiagocoutinho / parallel.sh
Created October 17, 2022 08:14
Concurrent bash tasks
#!/bin/bash
[email protected]:tiagocoutinho
REPOS=( "gepace" "cryocon" "vacuubrand" "xia-pfcu" "mythen-dcs" )
CLONE="git clone --depth=1 --no-single-branch"
function fetch {
for repo in "${REPOS[@]}"
do
@tiagocoutinho
tiagocoutinho / usocat.py
Created June 2, 2022 10:45
micro socat port forward in python
"""
python usocat.py <listening port> <downstream address>
Example:
python usocat.py 0:10001 192.168.1.5:8000
"""
import logging
import select
@tiagocoutinho
tiagocoutinho / multi_server.py
Created April 25, 2022 17:16
socket server multiprocess
import os
import socket
import logging
def cb(sock):
reader = sock.makefile('rb')
for line in reader:
sock.sendall(line[::-1])
@tiagocoutinho
tiagocoutinho / balanced.py
Created April 25, 2022 16:13
Balanced parenthesis in python
opening = "([{"
closing = ")]}"
def balanced(expr):
stack = []
for c in expr:
if c in opening:
stack.append(c)
elif c in closing: