Skip to content

Instantly share code, notes, and snippets.

View carlos-jenkins's full-sized avatar

Carlos Jenkins carlos-jenkins

View GitHub Profile
@carlos-jenkins
carlos-jenkins / goinflux.py
Created October 14, 2020 02:25
InfluxDB bootstrap script
#
# Execute with:
#
# virtualenv venv
# source venv/bin/activate
# pip3 install influxdb
# python3 goinflux.py
#
from influxdb import InfluxDBClient
@carlos-jenkins
carlos-jenkins / to_iso8601_and_back.py
Last active May 8, 2022 21:19
Create and parse ISO8601 with Offset with standard library only in Python 3.5 and 3.6
# PARSING AN ISO8601 WITH OFFSET FORMATTED STRING USING A PYTHON VERSION PRIOR
# TO 3.7 WITH THE STANDARD LIBRARY ONLY
#
#
# For the formatting:
#
# This returns a datetime object with the timezone set to UTC.
# The internal time can now be interpreted as UTC.
#
# datetime.now(timezone.utc)
@carlos-jenkins
carlos-jenkins / split.py
Last active November 4, 2019 20:17
Split a collection in two parts as defined by the given criteria.
def split(iterable, criteria=lambda e: e):
"""
Split a collection in two parts as defined by the given criteria.
Usage::
>>> split([1,2,3,4,5,6], lambda e: e > 2)
([3, 4, 5, 6], [1, 2])
By default, the element itself is used as the criteria::
@carlos-jenkins
carlos-jenkins / cache.py
Last active October 4, 2019 00:00
Cache the result of a function for certain time.
from time import monotonic
from functools import wraps
def cache(expiration_s):
"""
Cache the result of a function for certain time.
There is one restriction: all arguments of the wrapped function must be
immutable, that is, they must be used as key in a dictionary.
@carlos-jenkins
carlos-jenkins / jobqueue.groovy
Last active October 3, 2019 23:41
Jenkins script to get job queues
import groovy.json.JsonOutput
result = []
Jenkins.instance.queue.items.each {
// Only consider BuildableItem
// Other known objects are:
// - BlockedItem, which lacks the runId
if (it instanceof Queue.BuildableItem) {
result.add([
@carlos-jenkins
carlos-jenkins / kuraterm.glade
Last active April 2, 2023 13:28
Example of a Gtk application using a VTE terminal widget written in Python 3
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<requires lib="vte-2.91" version="0.52"/>
<object class="GtkWindow" id="window">
<property name="can_focus">False</property>
<signal name="delete-event" handler="stop" swapped="no"/>
<child>
<placeholder/>
@carlos-jenkins
carlos-jenkins / nopenlimit.py
Created September 6, 2019 00:12
Get and set the NOPEN limit (maximum number of open files)
from resource import RLIMIT_NOFILE, getrlimit, setrlimit
def setfilelimits(limit):
soft, hard = getrlimit(RLIMIT_NOFILE)
if limit > hard:
raise RuntimeError(
'Unable to raise open files limit to {}. '
'Hard limit is set to {}'.format(
@carlos-jenkins
carlos-jenkins / difftool.sh
Created July 19, 2019 20:44
Setup Meld for git difftool
sudo apt install meld
git config --global alias.difftree 'difftool --dir-diff'
git config --global diff.tool meld
git config --global difftool.prompt false
# Now use it:
# git difftree master..HEAD
# git difftree e49286eb1acbae69058856c744676c63d1154ba6..57adcd018d6e11c0982187cddfce6ee2bb641c6d
@carlos-jenkins
carlos-jenkins / base64.py
Created July 2, 2019 06:39
Calculate the length in bytes of a base64 string.
def b64len(b64str):
"""
Calculate the length in bytes of a base64 string.
This function could decode the base64 string to a binary blob and count its
number of bytes with len(). But, that's inefficient and requires more
memory that really needed.
Base64 encodes three bytes to four characters. Sometimes, padding is added
in the form of one or two '=' characters.
@carlos-jenkins
carlos-jenkins / async_poll.py
Last active June 15, 2020 17:38
Just a generic polling function
from time import time
from asyncio import sleep
from .poll import NotReadyYet
async def poll(
func,
timeout_s=30.0, polling_s=5.0,
catchexcs=(NotReadyYet, ), pollcb=None,