Skip to content

Navigation Menu

Sign in
Sign up

Latest commit

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date

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

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /