Mcucpp

Форк
0
/
packages.py 
76 строк · 2.5 Кб
1
import shutil
2
import tempfile
3
import urllib.request
4
from urllib.parse import urljoin
5
import re
6
import zipfile
7
from html.parser import HTMLParser
8
import os
9
from tqdm import tqdm
10
import os.path
11

12

13
def ResolveDownloadUrl(downloadUrl, pattern):
14
    with urllib.request.urlopen(downloadUrl ) as response:
15
       html = response.read().decode("utf-8")
16
    result = []
17
    class MyHTMLParser(HTMLParser):
18
        def handle_starttag(self, tag, attrs):
19
            if tag == 'a':
20
                for attr in attrs:
21
                    if attr[0] == 'href' and re.match(pattern, attr[1]):
22
                        result.append(urljoin(downloadUrl, attr[1]))
23
        def handle_endtag(self, tag):
24
            pass
25
        def handle_data(self, data):
26
            pass
27

28
    parser = MyHTMLParser()
29
    parser.feed(html)
30
    print (result)
31
    return result
32

33

34
def DownloadUrl(url, output_path = None):
35
    class DownloadProgressBar(tqdm):
36
        def update_to(self, b=1, bsize=1, tsize=None):
37
            if tsize is not None:
38
                self.total = tsize
39
            self.update(b * bsize - self.n)
40
    if output_path is None:
41
        output_path = tempfile.mktemp()
42
    print('Downloading "%s" to "%s"' % (url, output_path))
43
    with DownloadProgressBar(unit='B', unit_scale=True,
44
                             miniters=1, desc=url.split('/')[-1]) as t:
45
        urllib.request.urlretrieve(url, filename=output_path, reporthook=t.update_to)
46
    return output_path
47
        
48

49
def Unpack(file, toPath):
50
    print('Extracting "%s" to "%s"' % (file, toPath)) 
51
    with zipfile.ZipFile(file, 'r') as zip_ref:
52
        zip_ref.extractall(toPath)
53

54

55
def DownloadPackage(env, package):
56
    home = os.path.expanduser("~")
57
    packageExtractPath = os.path.join(home, '.mcucpp', package['type'], package['name'])
58
    if 'verifyPath' in package:
59
        verifyPath = os.path.join(packageExtractPath, package['verifyPath'])
60
        if os.path.isfile(verifyPath):
61
            print ('Package "%s" is already in place' % package['name'])
62
            return
63
            
64
    if 'searchUrl' in package:
65
        if 'searchPattern' in package:
66
            searchPattern = package['searchPattern']
67
        else:
68
            searchPattern = r'.*\.zip'
69
        downloadUrl = ResolveDownloadUrl(package['searchUrl'], searchPattern)[0]
70
    else:
71
        downloadUrl = package['dpwnloadUrl']
72
    file = DownloadUrl(downloadUrl)
73
    
74
    Unpack(file, packageExtractPath)
75
    env[package['name']] = packageExtractPath
76
    os.remove(file)
77

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.