-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTopological-Navigation-Editor.pyw
136 lines (104 loc) · 4.17 KB
/
Topological-Navigation-Editor.pyw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import json
import logging
import math
import os
import platform
import re
import subprocess
import sys
import time
from urllib import request, parse
import tkinter as tk
import contants
import master
ACTIVE_SYMBOL = '✕'
abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
os.chdir(dname)
if platform.system() == 'Windows':
import ctypes
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID('Matthew-J-Bennett.Topological-Navigation-Editor')
# Declare Top Level Functions
def has_internet(site='http://google.co.uk'):
try:
_request = request.Request(site, headers={'User-Agent': 'python'})
request.urlopen(_request, timeout=1)
return True
except:
return False
def updates_enabled():
return not os.path.isfile(".disableupdates")
def post_request(address, dictionary, headers=None):
if headers is None:
headers = {'user-agent': 'python'}
data = parse.urlencode(dictionary).encode()
_request = request.Request(address, data=data, headers=headers)
response = request.urlopen(_request, timeout=5).read().decode()
return response
def get_request(address, headers=None):
if headers is None:
headers = {'user-agent': 'python'}
_request = request.Request(address, headers=headers)
response = request.urlopen(_request, timeout=5).read().decode()
return response
def pagerise(x, per=10000):
pages = int(math.ceil(len(x) / per))
output = []
for i in range(pages):
output.append(x[per * i:per * (i + 1)])
return output
# Grab Current Version
with open('.version', 'r') as file:
version = file.read()
internet_connected = has_internet()
updates_enabled = updates_enabled()
if internet_connected and updates_enabled and has_internet(
'https://api.github.com/repos/Matthew-J-Bennett/Topological-Navigation-Editor/releases/latest'):
print('Checking for updates...')
query_address = 'https://api.github.com/repos/Matthew-J-Bennett/Topological-Navigation-Editor/releases/latest'
data = request.urlopen(query_address).read().decode('utf-8')
latest_version = json.loads(data)['tag_name']
version_nums = re.findall(r'\d+', version)
latest_version_nums = re.findall(r'\d+', latest_version)
if len(version_nums) != len(latest_version_nums):
if len(version_nums) > len(latest_version_nums):
latest_version_nums += (len(version_nums) - len(latest_version_nums)) * [0]
else:
version_nums += (len(latest_version_nums) - len(version_nums)) * [0]
comp = list(zip([int(x) for x in latest_version_nums], [int(x) for x in version_nums]))
for each in comp:
if each[0] > each[1]:
temp_window = tk.Tk()
try:
temp_window.iconbitmap(contants.ICON_LOC)
except TclError:
print('Your version of Python has errors relating to icons. An icon will not be used.')
update_text = 'Your version of the Topological Navigation Editor (' + version + \
') is not the latest available version (' + latest_version + \
'). Download the latest version from GitHub'
result = tk.messagebox.showinfo('Update Available', update_text, master=temp_window)
temp_window.destroy()
else:
print("Updates will not be performed!")
print(internet_connected)
print(updates_enabled)
# exceptions handler
def execp_handler(type, value, tb):
logger.exception("Exception: {}".format(value))
# Initiates the logger
if __name__ == "__main__":
if not os.path.exists('logs'):
os.mkdir('logs')
logger = logging.getLogger("Topological-Navigation-Editor")
# Creates a console log with timestamp
handler = logging.FileHandler('logs/{}.log'.format(time.strftime("%Y-%m-%d %H-%M-%S")))
formatter = logging.Formatter("%(asctime)s %(levelname)s: %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
handler2 = logging.StreamHandler()
handler2.setFormatter(formatter)
logger.addHandler(handler2)
logger.setLevel(logging.DEBUG)
logger.info('{}'.format(time.asctime()))
sys.excepthook = execp_handler
master.launch(logger)