Skip to content

toane/pynotes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 

Repository files navigation

Get a timestamp for now

from datetime import datetime
now = int(datetime.now().timestamp())

Use namedtuples

from collections import namedtuple
Appliance = namedtuple('Appliance', ['designation','voltage', 'weight', 'domain'])
bld = Appliance('blender', 220, 3, 'the kitchen')
print(bld)
print(bld[1])
"""
Appliance(designation='blender', voltage=220, weight=3, domain='the kitchen')
220
"""

Format an integer to hexadecimal representation

"0x{:02X}".format(254)

"""
'0xFE'
"""

Build a dict using comprehensions

normal_size = ['m','l','s']
bigger = {a : 'x' + a for a in normal_size}
print(bigger)
"""
{'m': 'xm', 'l': 'xl', 's': 'xs'}
"""

Use setter and getter decorators

class Animal(object):
    def __init__(self, weight):
        self._weight = weight
        print("that raccoon weights",weight,"kgs")

    @property
    def weight(self):
        return self._weight

    @weight.setter
    def weight(self, value):
        diff = value - self._weight
        if diff > 0:
            print("that racoon got", diff,"kgs fatter")
        if diff < 0:
            print("that racoon lost", abs(diff),"kgs")
        print("now it's",value,"kgs")
        self._weight = value

racoon = Animal(10)
racoon.weight = 8

"""
that raccoon weights 10 kgs
that racoon lost 2 kgs
now it's 8 kgs
"""

Consume an Iterable in chunks of fixed size

from itertools import chain, islice
def chunks(iterable, size=3) -> Iterable[Iterable]:
  """
  Slices an iterable into an iterable of iterables of fixed size
  """
    iterator = iter(iterable)
    for first in iterator:
        yield chain([first], islice(iterator, size - 1))

bread = ["1","2","3","4","5","6","7"]
for i, plate in enumerate(chunks(bread, 3), 1):
  print(list(plate))
"""
['1', '2', '3']
['4', '5', '6']
['7']
"""

Patch requests.get to test network methods

from unittest.mock import Mock, create_autospec, patch
import pytest
import requests
import json
from typing import List, Dict, Tuple
import attr

class PlayMock(object):

    def get_api(self, url:str="https://blank.org", data:Dict) -> Dict:
        """
        call an url with the given data
        @param url: some url
        @return : content
        """
        print("opening %s" % url)
        stk = requests.get(url, data=data)
        content = stk.text
        print("content was %s" % content)
        return stk.json()

    @patch("requests.get")
    def test_get_api(self, mock_req_get):
        obj = {"olives": "several", "skying": ["fast", "not fast"]}
        mock_req_get.return_value = Mock(ok=True, text = json.dumps(obj))
        mock_req_get.return_value.json.return_value = obj
        scam = self.get_api("http://friendoptions.net", data={"best_friend": "dog"})
        assert "olives" in scam.keys()


PlayMock().test_get_api()

Build an url

from urllib.parse import urlunparse
scheme = "http"
domain = "www.barney.ru"
port = 80
ext = "/auth/users/login"
r = urlunparse((scheme, '%s:%d' % (domain, port), ext, 'user', 'admin', 'anchor3'))
print(r)

"""
http://www.barney.ru:80/auth/users/login;user?admin#anchor3
"""

Deconstruct an url

from urllib.parse import urlparse
a = urlparse('http://www.barley.fr/tarpaulin/ermin.php3?action=have_pizza#now')
print(a)
"""
ParseResult(scheme='http', netloc='www.barley.fr', path='/tarpaulin/ermin.php3', params='', query='action=have_pizza', fragment='now')
"""

Cryptography

Encrypt/decrypt a message

from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA
"""
generate a private key:
openssl genrsa -out private.pem 1024
derive the public key
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
"""

# message  = b"e24652949e9d317e49da842b6b651cca098be3a6819e45ddcb518873f890f5a9"
message  = "Du café pour la maternité".encode('utf-8')

with open("private.pem","rb") as kf:
    pkeys = kf.read()
    pvkey = RSA.importKey(pkeys)

with open("message.enc","wb") as wr:
    key = RSA.importKey(open('public.pem').read())
    cipher = PKCS1_OAEP.new(key)
    ciphertext = cipher.encrypt(message)
    wr.write(ciphertext)

with open("message.enc","rb") as wo:
    ciphertext = wo.read()
    decipher = PKCS1_OAEP.new(pvkey)
    msg = decipher.decrypt(ciphertext).decode('utf-8')
    print(msg)

Stream through a huge file to compute its checksum

import hashlib
def get_fingerprint(file) -> str:
    h256 = hashlib.sha256()
    BUF_SIZE = 65536
    with open(file, "rb") as f:
        while True:
            data = f.read(BUF_SIZE)
            if not data:
                break
            h256.update(data)

    return h256.hexdigest()

r = get_fingerprint("one_big_file.exe")
print(r)

Pandas

Apply a method to each element in a DataFrame to create a new column

import pandas as pd

def check_price(oyster_type):
    if oyster_type == "expensive":
        return "45€"
    elif oyster_type == "free":
        return 0
    else:
        return "unknown"

menu = pd.DataFrame({"oyster":["expensive","free","reasonable"]})
menu["price"] = menu['oyster'].apply(check_price)
print(menu)
"""
oyster    price
0   expensive      45€
1        free        0
2  reasonable  unknown
"""

About

A collection of python snippets

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published