Compare commits
2 Commits
4a7d600ec1
...
66c4546783
Author | SHA1 | Date |
---|---|---|
Kashirigi | 66c4546783 | 6 years ago |
Kashirigi | 1757cfff4e | 6 years ago |
19 changed files with 513 additions and 2 deletions
@ -0,0 +1,21 @@ |
|||||||
|
import argparse,os |
||||||
|
|
||||||
|
arguments=argparse.ArgumentParser(description="GeoBC unzipper/sorter/renamer") |
||||||
|
arguments.add_argument("required", help="Required elements", nargs="*") #nargs=number of arguments |
||||||
|
arguments.add_argument("-o", help="Optional elements") |
||||||
|
arguments.add_argument("--alternate", help="This is supposedly a flag", action="store_true") |
||||||
|
arguments.add_argument("-f", "--file", help="Which files to process instead") |
||||||
|
#Don't forget to pass the arguments into another variable |
||||||
|
test=arguments.parse_args() |
||||||
|
print(test.required) |
||||||
|
if test.o: |
||||||
|
print(test.o) |
||||||
|
if test.alternate: |
||||||
|
print(test.alternate) |
||||||
|
if test.file: |
||||||
|
print(test.file) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,29 @@ |
|||||||
|
def deco(func): |
||||||
|
def wrapper(*args, **kwargs): |
||||||
|
func(*args, **kwargs) |
||||||
|
wrapper.count+=1 |
||||||
|
wrapper.count=0 |
||||||
|
return wrapper |
||||||
|
|
||||||
|
def deco2(func): |
||||||
|
def wrapper(*args, **kwargs): |
||||||
|
print(args) |
||||||
|
def fname(*args): |
||||||
|
print('args',args) |
||||||
|
|
||||||
|
return fname |
||||||
|
|
||||||
|
@deco2 |
||||||
|
def fname(arg): |
||||||
|
print(arg) |
||||||
|
|
||||||
|
|
||||||
|
@deco |
||||||
|
def main(arg): |
||||||
|
print(arg) |
||||||
|
|
||||||
|
for item in range(3): |
||||||
|
main(item) |
||||||
|
print('count', main.count) |
||||||
|
|
||||||
|
fname('test') |
@ -0,0 +1,38 @@ |
|||||||
|
from random import randint |
||||||
|
#this is the decorator |
||||||
|
def decor(func): #takes a function as an argument |
||||||
|
def x(z): # z = arguments passed from function that was decorated |
||||||
|
print('now with decoration') #extra shit from the decorator |
||||||
|
func(z) #run that function |
||||||
|
return x #return the decorator function |
||||||
|
|
||||||
|
@decor #invoke the decorator |
||||||
|
def z(number): |
||||||
|
print(number) |
||||||
|
|
||||||
|
z(3) |
||||||
|
|
||||||
|
|
||||||
|
#this is the functional equivalent |
||||||
|
|
||||||
|
def decor2(func): |
||||||
|
def x(z): |
||||||
|
print('also with decoration') |
||||||
|
func(z) |
||||||
|
return x |
||||||
|
|
||||||
|
def q(number): |
||||||
|
print(number) |
||||||
|
|
||||||
|
zz=decor2(q) |
||||||
|
zz(3) |
||||||
|
|
||||||
|
|
||||||
|
##another example |
||||||
|
|
||||||
|
@decor |
||||||
|
def othershite(thing): |
||||||
|
x=randint(1,100) |
||||||
|
print(f'here is some other shite and a random number({x}) plus {thing}') |
||||||
|
|
||||||
|
othershite('piztak') |
@ -0,0 +1,31 @@ |
|||||||
|
#import numpy as np |
||||||
|
#import time |
||||||
|
import math |
||||||
|
from math import tan as qe |
||||||
|
|
||||||
|
def deco(func): |
||||||
|
def wrapper(y): |
||||||
|
ang = y *2 *math.pi/360 |
||||||
|
return func(ang) |
||||||
|
return wrapper #You need two returns! So confusing! |
||||||
|
|
||||||
|
|
||||||
|
def test(number): |
||||||
|
return number |
||||||
|
|
||||||
|
@deco |
||||||
|
def test2(number): |
||||||
|
return number |
||||||
|
|
||||||
|
|
||||||
|
print('undecorated') |
||||||
|
print(test(45)) |
||||||
|
print('decorated') |
||||||
|
print(test2(45)) |
||||||
|
print('math.tan') |
||||||
|
print(qe(45)) |
||||||
|
print('math.tan decorated') |
||||||
|
test3=deco(qe) |
||||||
|
print(type(test3)) |
||||||
|
print(test3(45)) |
||||||
|
print(math.tan(45)) |
@ -0,0 +1,77 @@ |
|||||||
|
#! /Library/Frameworks/Python.framework/Versions/3.6/bin/python3 |
||||||
|
import smtplib |
||||||
|
from email.message import EmailMessage as Em |
||||||
|
#https://stackoverflow.com/questions/16683732/python-smtplib-security |
||||||
|
|
||||||
|
import requests |
||||||
|
from bs4 import BeautifulSoup as bs |
||||||
|
|
||||||
|
def emailer(usr, pwd, mailserv, port, msg): |
||||||
|
server = smtplib.SMTP(mailserv, port) |
||||||
|
server.ehlo() |
||||||
|
server.starttls() |
||||||
|
server.ehlo() |
||||||
|
server.login(usr,pwd) |
||||||
|
server.sendmail(msg['From'], msg['To'], msg.as_string()) |
||||||
|
server.close() |
||||||
|
|
||||||
|
def tester(url): |
||||||
|
try: |
||||||
|
s=requests.Session() |
||||||
|
checker=s.get(url) |
||||||
|
if not checker.ok: |
||||||
|
returncode = checker.status_code |
||||||
|
#returns integer of server status code https://www.w3.org/Protocols/HTTP/HTRESP.html |
||||||
|
print(returncode) |
||||||
|
soup = bs(page.text, 'html.parser') |
||||||
|
|
||||||
|
if returncode != 200 and str(returncode).startswith('2'): |
||||||
|
content = '{} returned status which is not code 200 (OK): {}'.format(URL, returncode) |
||||||
|
|
||||||
|
elif str(returncode).startswith('3'): |
||||||
|
content = '{} returned a redirect status: {}/'.format(URL, returncode) |
||||||
|
|
||||||
|
elif str(returncode).startswith('4'): |
||||||
|
content = '{} returned a not found status: {}.'.format(URL, returncode) |
||||||
|
|
||||||
|
elif str(returncode).startswith('5'): |
||||||
|
content = '{} returned an internal error: {}.'.format(URL, returncode) |
||||||
|
|
||||||
|
elif str(soup.title) != titletest: |
||||||
|
content = '{} title string has changed. Possible hacking attempt.'.format(URL) |
||||||
|
else: |
||||||
|
content = 'OK' |
||||||
|
return content |
||||||
|
|
||||||
|
|
||||||
|
except: |
||||||
|
content = 'Server {} appears to be down.'.format(URL) |
||||||
|
return content |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
|
||||||
|
|
||||||
|
USER = 'user@example.invalid' |
||||||
|
PASS = 'passwordabc123notreally' |
||||||
|
MAILSERVER = 'smtp.example.invalid' |
||||||
|
PORT = 587 |
||||||
|
URL='https://example.invalid' |
||||||
|
message = Em() |
||||||
|
message['Subject'] = '{} status warning'.format(URL) |
||||||
|
message['From'] = user |
||||||
|
message['To'] = 'recipient1@example.invalid, recipient2@example.invalid' |
||||||
|
titletest='<title>Website Title</title>' |
||||||
|
|
||||||
|
try: |
||||||
|
content=tester(URL) |
||||||
|
except: |
||||||
|
content = 'Server {} appears to be down.'.format(URL) |
||||||
|
#pass |
||||||
|
|
||||||
|
message.set_content(content) |
||||||
|
|
||||||
|
if content !='OK': |
||||||
|
emailer(USER, PASS, MAILSERVER, PORT, message) |
@ -0,0 +1,17 @@ |
|||||||
|
import requests as r |
||||||
|
from bs4 import BeautifulSoup as bs |
||||||
|
import pypub |
||||||
|
import os |
||||||
|
|
||||||
|
#page = r.get('http://gutenberg.net.au/ebooks06/0600811h.html') |
||||||
|
#pagetext=page.text |
||||||
|
#cleanpage=pypub.clean( pagetext ) |
||||||
|
|
||||||
|
book= pypub.Epub('Book Title', creator="Robert E Howard", publisher='Project Gutenberg Australia') |
||||||
|
|
||||||
|
#xchapterone = pypub.ChapterFactory(cleanpage) |
||||||
|
z= pypub.create_chapter_from_url('http://gutenberg.net.au/ebooks06/0600811h.html') |
||||||
|
|
||||||
|
book.add_chapter(z) |
||||||
|
|
||||||
|
book.create_epub( os.getcwd() ) |
@ -0,0 +1,65 @@ |
|||||||
|
class _GetCh: |
||||||
|
def __init__(self): |
||||||
|
try: |
||||||
|
self.impl = _GetChWindows() |
||||||
|
except ImportError: |
||||||
|
try: |
||||||
|
self.impl = _GetChMacCarbon() |
||||||
|
except ImportError: |
||||||
|
self.impl = _GetChUnix() |
||||||
|
def __call__(self): |
||||||
|
return self.impl() |
||||||
|
|
||||||
|
class _GetChWindows: |
||||||
|
def __init__(self): |
||||||
|
import msvcrt |
||||||
|
def __call__(self): |
||||||
|
import msvcrt |
||||||
|
if msvcrt.kbhit(): |
||||||
|
while msvcrt.kbhit(): |
||||||
|
ch = msvcrt.getch() |
||||||
|
while ch in b'\x00\xe0': |
||||||
|
msvcrt.getch() |
||||||
|
ch = msvcrt.getch() |
||||||
|
return ord( ch.decode() ) |
||||||
|
else: |
||||||
|
return -1 |
||||||
|
|
||||||
|
class _GetChMacCarbon: |
||||||
|
def __init__(self): |
||||||
|
import Carbon |
||||||
|
Carbon.Evt |
||||||
|
def __call__(self): |
||||||
|
import Carbon |
||||||
|
if Carbon.Evt.EventAvail(0x0008)[0]==0: # 0x0008 is the keyDownMask |
||||||
|
return "" |
||||||
|
else: |
||||||
|
(what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)[1] |
||||||
|
return msg & 0x000000FF |
||||||
|
|
||||||
|
class _GetChUnix: |
||||||
|
def __init__(self): |
||||||
|
import tty, sys, termios # import termios now or else you'll get the Unix |
||||||
|
# version on the Mac |
||||||
|
def __call__(self): |
||||||
|
import sys, tty, termios |
||||||
|
fd = sys.stdin.fileno() |
||||||
|
old_settings = termios.tcgetattr(fd) |
||||||
|
try: |
||||||
|
tty.setraw(sys.stdin.fileno()) |
||||||
|
ch = sys.stdin.read(1) |
||||||
|
finally: |
||||||
|
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) |
||||||
|
return ord(ch) |
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
|
||||||
|
InKey = _GetCh() |
||||||
|
|
||||||
|
print( "Press Ctrl-C to exit" ) |
||||||
|
|
||||||
|
c = InKey() |
||||||
|
while c != 3: |
||||||
|
if c >= 0: |
||||||
|
print( c ) |
||||||
|
c = InKey() |
@ -0,0 +1,13 @@ |
|||||||
|
import requests |
||||||
|
from bs4 import BeautifulSoup |
||||||
|
import urllib.parse |
||||||
|
''' From https://stackoverflow.com/questions/42002336/using-python-requests-module-to-login-on-an-wordpress-based-website''' |
||||||
|
|
||||||
|
if __name__=="__main__": |
||||||
|
s=requests.Session() |
||||||
|
link="http://example.invalid/wp-login" |
||||||
|
initial=s.get(link) |
||||||
|
|
||||||
|
login_data={"log":"individual@example.invalid","pwd":"passwordgoeshere",'rememberme':'forever','redirect_to':'http://example.invalid/dash/', 'redirect_to_automatic': '1'} |
||||||
|
page_login=s.post(link, data=login_data) |
||||||
|
print(page_login) |
@ -0,0 +1,4 @@ |
|||||||
|
hostname="smtp.example.invalid" |
||||||
|
portno=465 |
||||||
|
username='user@example.invalid' |
||||||
|
password='' |
@ -0,0 +1,43 @@ |
|||||||
|
import smtplib |
||||||
|
from mailinfo import * |
||||||
|
from email.mime.multipart import MIMEMultipart |
||||||
|
from email.mime.text import MIMEText |
||||||
|
|
||||||
|
print(username, hostname, portno) |
||||||
|
|
||||||
|
server=smtplib.SMTP_SSL(host=hostname,port=portno) |
||||||
|
server.set_debuglevel(1) |
||||||
|
#server.starttls() |
||||||
|
server.ehlo() |
||||||
|
server.login(username,password) |
||||||
|
|
||||||
|
message=MIMEMultipart() |
||||||
|
message['From']=username |
||||||
|
message['To']='6045618656@sms.rogers.com' |
||||||
|
message['Subject']="I can python" |
||||||
|
body="Sending a text message via command script." |
||||||
|
|
||||||
|
message.attach(MIMEText(body,'plain')) |
||||||
|
|
||||||
|
server.send_message(message) |
||||||
|
|
||||||
|
server.quit() |
||||||
|
|
||||||
|
|
||||||
|
''' |
||||||
|
Bell: [10-digit phone number]@txt.bell.ca |
||||||
|
Chatr: [10-digit phone number]@sms.rogers.com (rogers was PCS, now SMS) |
||||||
|
Eastlink: [10-digit phone number]@txt.eastlink.ca |
||||||
|
Fido: [10-digit phone number]@fido.ca |
||||||
|
Freedom: [10-digit phone number]@txt.freedommobile.ca |
||||||
|
Koodo Mobile: [10-digit phone number]@msg.koodomobile.com |
||||||
|
MTS: [10-digit phone number]@text.mtsmobility.com |
||||||
|
PC Mobile: [10-digit phone number]@mobiletxt.ca |
||||||
|
Public Mobile: [10-digit phone number]@msg.telus.com |
||||||
|
Rogers: [10-digit phone number]@pcs.rogers.com |
||||||
|
Sasktel: [10-digit phone number]@sms.sasktel.com |
||||||
|
Solo Mobile: [10-digit phone number]@txt.bell.ca |
||||||
|
TBayTel: [10-digit phone number]@pcs.rogers.com |
||||||
|
TELUS: [10-digit phone number]@msg.telus.com |
||||||
|
Virgin Mobile: [10-digit phone number]@vmobile.ca |
||||||
|
''' |
@ -0,0 +1,10 @@ |
|||||||
|
from sys import argv |
||||||
|
import codecs |
||||||
|
|
||||||
|
name, codec=argv |
||||||
|
|
||||||
|
#f = codecs.open("example.html", 'r', 'cp1140') |
||||||
|
f = codecs.open("example.html", 'r', codec) |
||||||
|
u = f.read() # now the contents have been transformed to a Unicode string |
||||||
|
out = codecs.open("example_u.html", 'w', 'utf-8') |
||||||
|
out.write(u) # and now the contents have been output as UTF-8 |
@ -0,0 +1,19 @@ |
|||||||
|
import model, view |
||||||
|
|
||||||
|
class Controller(object): |
||||||
|
"""docstring for Controller.""" |
||||||
|
def __init__(self, model, view): |
||||||
|
super(Controller, self).__init__() |
||||||
|
self.model = model |
||||||
|
self.view = view |
||||||
|
|
||||||
|
def update(self, *args): |
||||||
|
self.model.added(*args) |
||||||
|
self.view.updated(args) |
||||||
|
|
||||||
|
def expunge(self, *args): |
||||||
|
self.model.removed(*args) |
||||||
|
self.view.deleted(list(args)) |
||||||
|
|
||||||
|
def display(self): |
||||||
|
self.view.displayed(self.model.var) |
@ -0,0 +1,15 @@ |
|||||||
|
class Model(object): |
||||||
|
"""docstring for Model.""" |
||||||
|
def __init__(self, *args): |
||||||
|
self.var = list(args) |
||||||
|
|
||||||
|
def added(self, *args): |
||||||
|
self.var = self.var+ list(args) |
||||||
|
|
||||||
|
|
||||||
|
def removed(self, *args): |
||||||
|
for item in args: |
||||||
|
self.var.remove(item) |
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
x=Model('paulasda') |
@ -0,0 +1,11 @@ |
|||||||
|
import model, view, controller |
||||||
|
|
||||||
|
bp=['alpha', 'gamma', 'Deutschland', 'failure'] |
||||||
|
v=view.View() |
||||||
|
m=model.Model('initial','population') |
||||||
|
c=controller.Controller(m,v) |
||||||
|
|
||||||
|
c.update(bp) |
||||||
|
c.expunge(bp) |
||||||
|
c.update('This', 'works') |
||||||
|
c.display() |
@ -0,0 +1,21 @@ |
|||||||
|
class View(object): |
||||||
|
"""docstring for View.""" |
||||||
|
__instance = None |
||||||
|
def __init__(self): |
||||||
|
super(View, self).__init__() |
||||||
|
if View.__instance !=None: |
||||||
|
raise Exception('not a thing') |
||||||
|
else: |
||||||
|
View.__instance = self |
||||||
|
|
||||||
|
@staticmethod |
||||||
|
def updated(ls): |
||||||
|
print(f'added {list(*ls)}') |
||||||
|
|
||||||
|
@staticmethod |
||||||
|
def deleted(ls): |
||||||
|
print(f'deleted {list(ls)}') |
||||||
|
|
||||||
|
@staticmethod |
||||||
|
def displayed(ls): |
||||||
|
print(f'contents {list(ls)}') |
@ -0,0 +1,31 @@ |
|||||||
|
import svgwrite |
||||||
|
from svgwrite import cm,mm |
||||||
|
from math import cos,sin,pi |
||||||
|
''' |
||||||
|
https://stackoverflow.com/questions/13006601/setting-default-units-in-svg-python-svgwrite |
||||||
|
''' |
||||||
|
|
||||||
|
|
||||||
|
drawring = svgwrite.Drawing('test.svg', profile='tiny', size=('30cm', '30cm'), viewBox=('0 0 30 30')) |
||||||
|
|
||||||
|
''' You need size and viewBox. Why I don't know, also formatting is insane''' |
||||||
|
|
||||||
|
def polycoord(sides,radius,cenx=0,ceny=0,unit='cm',angle=0, *args, **kwargs): |
||||||
|
x=[] |
||||||
|
y=[] |
||||||
|
for n in range(sides): |
||||||
|
x.append( str((radius *cos(2*pi*n/sides + 2*pi*angle) + cenx))) |
||||||
|
y.append( str((radius *sin(2*pi*n/sides + 2*pi*angle) + ceny))) |
||||||
|
z=list(zip(x,y)) |
||||||
|
return z |
||||||
|
|
||||||
|
coords=polycoord(sides=4, radius=2, angle=45, cenx=7, ceny=7) |
||||||
|
if __name__ == '__main__': |
||||||
|
hex=drawring.polygon( points=polycoord(sides=6, radius=1, cenx=2, ceny=3), fill="blue", id="hex") |
||||||
|
square=drawring.polygon(points=polycoord(sides=4, radius=3, cenx=10, ceny=10, angle=30), fill="yellow", id="square") |
||||||
|
pentagon=drawring.polygon(points=polycoord(sides=5, radius=7, cenx=15, ceny=15, angle=20), fill="none", stroke="black", stroke_width="0.2 ", id="pentagon") |
||||||
|
|
||||||
|
drawring.add(square) |
||||||
|
drawring.add(hex) |
||||||
|
drawring.add(pentagon) |
||||||
|
drawring.save() |
@ -0,0 +1,16 @@ |
|||||||
|
Cartesian coordinates for regular polygons: |
||||||
|
|
||||||
|
https://stackoverflow.com/questions/7198144/how-to-draw-a-n-sided-regular-polygon-in-cartesian-coordinates |
||||||
|
|
||||||
|
|
||||||
|
Let's assume you want to draw an N-sided polygon of radius r, centred at (0,0). Then the n vertices are given by: |
||||||
|
|
||||||
|
x[n] = r * cos(2*pi*n/N) |
||||||
|
y[n] = r * sin(2*pi*n/N) |
||||||
|
|
||||||
|
where 0 <= n < N. Note that cos and sin here are working in radians, not degrees (this is pretty common in most programming languages). |
||||||
|
|
||||||
|
If you want a different centre, then just add the coordinates of the centre point to each (x[n], y[n]). If you want a different orientation, you just need to add a constant angle. So the general form is: |
||||||
|
|
||||||
|
x[n] = r * cos(2*pi*n/N + theta) + x_centre |
||||||
|
y[n] = r * sin(2*pi*n/N + theta) + y_centre |
@ -0,0 +1,46 @@ |
|||||||
|
import svgwrite |
||||||
|
from svgwrite import cm,mm |
||||||
|
from math import cos,sin,pi |
||||||
|
''' |
||||||
|
https://stackoverflow.com/questions/13006601/setting-default-units-in-svg-python-svgwrite |
||||||
|
''' |
||||||
|
|
||||||
|
|
||||||
|
drawring = svgwrite.Drawing('test.svg', profile='tiny', size=('17cm', '13cm'), viewBox=('0 0 17 13')) |
||||||
|
|
||||||
|
''' You need size and viewBox. Why I don't know, also formatting is insane''' |
||||||
|
|
||||||
|
x=[] |
||||||
|
y=[] |
||||||
|
N=6 |
||||||
|
r=2 |
||||||
|
print(cm) |
||||||
|
for n in range(N): |
||||||
|
x.append( (r * cos(2*pi*n/N)+7) ) |
||||||
|
y.append( (r * sin(2*pi*n/N)+7) ) |
||||||
|
|
||||||
|
z=list(zip(x,y)) |
||||||
|
|
||||||
|
def polycoord(sides,radius,cenx=0,ceny=0,unit='cm'): |
||||||
|
x=[] |
||||||
|
y=[] |
||||||
|
for n in range(sides): |
||||||
|
x.append( str((r *cos(2*pi*n/sides)+(sides+1))) + cenx) |
||||||
|
y.append( str((r *sin(2*pi*n/sides)+(sides+1))) + ceny) |
||||||
|
z=list(zip(x,y)) |
||||||
|
return z |
||||||
|
''' |
||||||
|
print(x,y) |
||||||
|
print(z) |
||||||
|
point=list(zip([xp*cm for xp in x],[yp*cm for yp in y])) |
||||||
|
print(point) |
||||||
|
''' |
||||||
|
hex=drawring.polygon(points=z, stroke='green',fill='yellow', id='hex1',stroke_width='.1') |
||||||
|
|
||||||
|
''' |
||||||
|
hex=drawring.polygon(points=[(9,7),(8, 8.732050807568877),(6,8.732050807568879),(5, 7),(6, 5.267949192431123),(8, 5.267949192431123)] ,stroke='green',id='hex1',stroke_width=3) |
||||||
|
''' |
||||||
|
|
||||||
|
|
||||||
|
drawring.add(hex) |
||||||
|
drawring.save() |
@ -1,3 +1,7 @@ |
|||||||
# gist |
##Useful code snippets |
||||||
|
|
||||||
Potentially useful code snippets |
These are some potentially useful code snippets. Some may be out of date, but there you are. |
||||||
|
|
||||||
|
Mostly for Python and C++/Arduino. I'm not a very good programmer, so don't be expecting miracles here. |
||||||
|
|
||||||
|
Also, **remember to anonymize** |
||||||
|
Loading…
Reference in new issue