Skip to content

Instantly share code, notes, and snippets.

View tyler-8's full-sized avatar

Tyler Bigler tyler-8

View GitHub Profile
import asyncio
async def task(seconds: int=5):
"""Sleep for some time."""
await asyncio.sleep(seconds)
return f"slept {seconds} seconds!"
async def multi_task(sleeps_to_sleep: list[int]):
"""Start coroutines from a list of inputs."""
all_the_tasks = [task(sleep_time) for sleep_time in sleeps_to_sleep]
@tyler-8
tyler-8 / netbox_validator_unique_vm_names.py
Last active July 4, 2022 14:59
Enforce case-insensitive unique VM names.
from extras.validators import CustomValidator
from virtualization.models import VirtualMachine
class UniqueVirtualMachineNamesCasefold(CustomValidator):
"""Enforce case-insensitive unique VM names.
Your configuration.py file would contain something like this:
CUSTOM_VALIDATORS = {
@tyler-8
tyler-8 / site_circuit_validation.py
Last active July 1, 2022 01:57
A Custom Validator for NetBox 3.0+ to prevent sites from being retired if they have circuits that aren't deprovisioning or decommissioned.
from extras.validators import CustomValidator
from circuits.models import Circuit
class SiteStatusCircuitValidator(CustomValidator):
"""
Prevent sites from being retired if they have circuits that aren't in deprovisioning or decommissioned status.
"""
def validate(self, site):
circuit_count = Circuit.objects.filter(terminations__site=site).exclude(
import asyncio
def do_work_sync(seconds):
"""Wait 'seconds' using sync code"""
return asyncio.run(do_work_async(seconds, "sync"))
def organize_work_sync(work_inputs):
"""Execute multiple calls of the sync function"""
@tyler-8
tyler-8 / wordle_helper.py
Last active January 23, 2022 04:10
A stupid script to help you cheat. Don't do it, this was just an experiment.
"""
Uses the `words_alpha.txt` file from
https://github.com/dwyl/english-words/
"""
import random
from collections import Counter
from typing import Iterable, Tuple
def has_no_repeat_letters(word: str) -> bool:
@tyler-8
tyler-8 / parse_cflow_pcap.py
Last active April 13, 2020 20:36
A quick example of how to use pyshark to parse cflow data from a capture
import pyshark
from collections import defaultdict
FIELDS = (
"srcaddr",
"dstaddr",
"octets",
)
@tyler-8
tyler-8 / cf_netmiko.py
Created January 11, 2019 01:59
Example of concurrent futures with netmiko
#!/usr/bin/env python3
'''
Use processes and Netmiko to connect to each of the devices. Execute
'show version' on each device. Use concurrent futures built-in queue
to pass the output back to the parent process. Record the amount of
time required to do this.
'''
import concurrent.futures as cf
from datetime import datetime
@tyler-8
tyler-8 / Dockerfile
Created May 4, 2018 14:13
Docker Image for Python 3.6 and net-snmp installed (for EasySNMP usage).
FROM python:3.6
# Annoying sources for net-snmp, which is a dependency for easysnmp
RUN export DEBIAN_FRONTEND=noninteractive && \
export DEBIAN_RELEASE=$(awk -F'[" ]' '/VERSION=/{print $3}' /etc/os-release | tr -cd '[[:alnum:]]._-' ) && \
echo "remove main from /etc/apt/sources.list" && \
sed -i '/main/d' /etc/apt/sources.list && \
echo "remove contrib from /etc/apt/sources.list" && \
sed -i '/contrib/d' /etc/apt/sources.list && \
echo "remove non-free from /etc/apt/sources.list" && \
sed -i '/non-free/d' /etc/apt/sources.list && \
@tyler-8
tyler-8 / portlist.py
Created April 4, 2018 18:36
Parse the PortList output from SNMP OIDs like 'ieee8021QBridgeVlanCurrentEgressPorts'
def parsePortList(portlist):
"""
Returns indexes of ports where
VLAN is present.
"""
port_status = []
present_ports = []
for values in portlist:
for i, bit in enumerate('{:08b}'.format(values)):
bit = int(bit)
Traceback (most recent call last):
File "/venv/3.6.4/envs/fmt/lib/python3.6/site-packages/flask/app.py", line 1997, in __call__
return self.wsgi_app(environ, start_response)
File "/venv/3.6.4/envs/fmt/lib/python3.6/site-packages/flask/app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "/venv/3.6.4/envs/fmt/lib/python3.6/site-packages/flask/app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "/venv/3.6.4/envs/fmt/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/venv/3.6.4/envs/fmt/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app