Skip to content

Commit d1b49e0

Browse files
author
Ronald Dehuysser
committed
Memory improvements
1 parent b24de1f commit d1b49e0

File tree

3 files changed

+16
-53
lines changed

3 files changed

+16
-53
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
secrets.py
1+
secrets.py
2+
pymakr.conf

app/httpclient.py

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,18 @@
1-
import usocket, os, time
2-
1+
import usocket, os
32
class Response:
43

54
def __init__(self, socket, saveToFile=None):
65
self._socket = socket
76
self._saveToFile = saveToFile
87
self._encoding = 'utf-8'
98
if saveToFile is not None:
10-
print('Saving to file', saveToFile)
11-
time.sleep(1)
129
CHUNK_SIZE = 512 # bytes
1310
with open(saveToFile, 'w') as outfile:
14-
print('Opened file', saveToFile)
15-
time.sleep(1)
1611
data = self._socket.read(CHUNK_SIZE)
1712
while data:
1813
outfile.write(data)
1914
data = self._socket.read(CHUNK_SIZE)
2015
outfile.close()
21-
print('Data written to file', saveToFile)
22-
time.sleep(1)
2316

2417
self.close()
2518

@@ -33,26 +26,23 @@ def content(self):
3326
if self._saveToFile is not None:
3427
raise SystemError('You cannot get the content from the response as you decided to save it in {}'.format(self._saveToFile))
3528

36-
result = None
3729
try:
3830
result = self._socket.read()
31+
return result
3932
finally:
4033
self.close()
41-
return result
4234

4335
@property
4436
def text(self):
4537
return str(self.content, self._encoding)
4638

4739
def json(self):
48-
result = None
4940
try:
5041
import ujson
5142
result = ujson.load(self._socket)
43+
return result
5244
finally:
5345
self.close()
54-
return result
55-
5646

5747

5848
class HttpClient:
@@ -61,8 +51,6 @@ def __init__(self, headers={}):
6151
self._headers = headers
6252

6353
def request(self, method, url, data=None, json=None, file=None, custom=None, saveToFile=None, headers={}, stream=None):
64-
print('Req', url)
65-
6654
def _write_headers(sock, _headers):
6755
for k in _headers:
6856
sock.write(b'{}: {}\r\n'.format(k, _headers[k]))
@@ -84,34 +72,16 @@ def _write_headers(sock, _headers):
8472
host, port = host.split(':', 1)
8573
port = int(port)
8674

87-
print('Getting addr info')
88-
time.sleep(1)
8975
ai = usocket.getaddrinfo(host, port, 0, usocket.SOCK_STREAM)
9076
if len(ai) < 1:
9177
raise ValueError('You are not connected to the internet...')
9278
ai = ai[0]
9379

94-
print('Opening socket', ai)
95-
time.sleep(1)
9680
s = usocket.socket(ai[0], ai[1], ai[2])
97-
print('Socket open')
98-
time.sleep(1)
9981
try:
100-
print('Connecting to socket')
101-
time.sleep(1)
10282
s.connect(ai[-1])
103-
print('Connected to socket')
104-
time.sleep(1)
10583
if proto == 'https:':
106-
try:
107-
print('Wrapping socket with ssl')
108-
time.sleep(1)
109-
s = ussl.wrap_socket(s)
110-
print('Wrapped socket with ssl')
111-
time.sleep(1)
112-
except:
113-
print("An error occurred.")
114-
84+
s = ussl.wrap_socket(s, server_hostname=host)
11585
s.write(b'%s /%s HTTP/1.0\r\n' % (method, path))
11686
if not 'Host' in headers:
11787
s.write(b'Host: %s\r\n' % host)
@@ -184,4 +154,4 @@ def patch(self, url, **kw):
184154
return self.request('PATCH', url, **kw)
185155

186156
def delete(self, url, **kw):
187-
return self.request('DELETE', url, **kw)
157+
return self.request('DELETE', url, **kw)

app/ota_updater.py

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import machine, usocket, os, gc
1+
import os, gc
22
from .httpclient import HttpClient
33

44
class OTAUpdater:
@@ -9,7 +9,7 @@ class OTAUpdater:
99

1010
def __init__(self, github_repo, github_src_dir='', module='', main_dir='main', new_version_dir='next', secrets_file=None, headers={}):
1111
self.http_client = HttpClient(headers=headers)
12-
self.github_repo = github_repo.rstrip('/').replace('https://github.com', 'https://api.github.com/repos')
12+
self.github_repo = github_repo.rstrip('/').replace('https://github.com/', '')
1313
self.github_src_dir = '' if len(github_src_dir) < 1 else github_src_dir.rstrip('/') + '/'
1414
self.module = module.rstrip('/')
1515
self.main_dir = main_dir
@@ -122,7 +122,7 @@ def get_version(self, directory, version_file_name='.version'):
122122
return '0.0'
123123

124124
def get_latest_version(self):
125-
latest_release = self.http_client.get(self.github_repo + '/releases/latest')
125+
latest_release = self.http_client.get('https://api.github.com/repos/{}/releases/latest'.format(self.github_repo))
126126
version = latest_release.json()['tag_name']
127127
latest_release.close()
128128
return version
@@ -133,10 +133,9 @@ def _download_new_version(self, version):
133133
print('Version {} downloaded to {}'.format(version, self.modulepath(self.new_version_dir)))
134134

135135
def _download_all_files(self, version, sub_dir=''):
136-
root_url = self.github_repo + '/contents/' + self.github_src_dir + self.main_dir + sub_dir
137-
print(root_url)
138-
gc.collect()
139-
file_list = self.http_client.get(root_url + '?ref=refs/tags/' + version)
136+
url = 'https://api.github.com/repos/{}/contents{}{}{}?ref=refs/tags/{}'.format(self.github_repo, self.github_src_dir, self.main_dir, sub_dir, version)
137+
gc.collect()
138+
file_list = self.http_client.get(url)
140139
for file in file_list.json():
141140
path = self.modulepath(self.new_version_dir + '/' + file['path'].replace(self.main_dir + '/', '').replace(self.github_src_dir, ''))
142141
if file['type'] == 'file':
@@ -147,18 +146,12 @@ def _download_all_files(self, version, sub_dir=''):
147146
print('Creating dir', path)
148147
self.mkdir(path)
149148
self._download_all_files(version, sub_dir + '/' + file['name'])
149+
gc.collect()
150150

151151
file_list.close()
152152

153153
def _download_file(self, version, gitPath, path):
154-
repo_name = self.github_repo.replace('https://api.github.com/repos/', '')
155-
try:
156-
self.http_client.get('https://cdn.jsdelivr.net/gh/{}@{}/{}'.format(repo_name, version, gitPath), saveToFile=path)
157-
except OSError as err:
158-
gc.collect()
159-
self.http_client.get('https://raw.githubusercontent.com/{}/{}/{}'.format(repo_name, version, gitPath), saveToFile=path)
160-
pass
161-
154+
self.http_client.get('https://raw.githubusercontent.com/{}/{}/{}'.format(self.github_repo, version, gitPath), saveToFile=path)
162155

163156
def _copy_secrets_file(self):
164157
if self.secrets_file:
@@ -195,8 +188,7 @@ def _os_supports_rename(self) -> bool:
195188
self._mk_dirs('otaUpdater/osRenameTest')
196189
os.rename('otaUpdater', 'otaUpdated')
197190
result = len(os.listdir('otaUpdated')) > 0
198-
os.rmdir('otaUpdated/osRenameTest')
199-
os.rmdir('otaUpdated')
191+
self._rmtree('otaUpdated')
200192
return result
201193

202194
def _copy_directory(self, fromPath, toPath):

0 commit comments

Comments
 (0)