reposync

Форк
0
/
reposync.py 
82 строки · 2.8 Кб
1
#!/usr/bin/env python3
2

3
#
4
# RepoSync
5
#
6
# Copyright (c) 2023-2024 Владислав Щапов aka Vladislav Shchapov <vladislav@shchapov.ru>
7
#
8
# Licensed under the Apache License, Version 2.0 (the "License");
9
# you may not use this file except in compliance with the License.
10
# You may obtain a copy of the License at
11
#
12
#     http://www.apache.org/licenses/LICENSE-2.0
13
#
14
# Unless required by applicable law or agreed to in writing, software
15
# distributed under the License is distributed on an "AS IS" BASIS,
16
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
# See the License for the specific language governing permissions and
18
# limitations under the License.
19
#
20

21
#
22
# python3.12 -m venv --system-site-packages /Users/phprus/bin/venv/reposync
23
# source /Users/phprus/bin/venv/reposync/bin/activate
24
#
25
# python3.11 -m venv --system-site-packages /home/phprus/bin/venv/reposync
26
# source /home/phprus/bin/venv/reposync/bin/activate
27
#
28
# pip install urllib3
29
#
30

31
#
32
# ./reposync.py -vvvv --action=check https://mirror.yandex.ru/almalinux/9/SAPHANA/x86_64/os     ../al9-saphana-test
33
# ./reposync.py -vvvv                https://mirror.yandex.ru/almalinux/9/SAPHANA/x86_64/os     ../al9-saphana-test
34

35
#
36

37
import argparse
38
import urllib.parse
39

40
import provider
41

42

43
class ValidateUrl(argparse.Action):
44
    def is_url(self, url):
45
        min_attributes = ('scheme', 'netloc')
46
        try:
47
            tokens = urllib.parse.urlparse(url)
48
            return all([getattr(tokens, attr) for attr in min_attributes])
49
        except ValueError:
50
            return False
51

52
    def __call__(self, parser, namespace, values, option_string=None):
53
        if not self.is_url(values):
54
            parser.error(f"Please enter a valid URL. Got: {values}")
55
        setattr(namespace, self.dest, values)
56

57

58
parser = argparse.ArgumentParser(
59
    add_help=True,
60
    description='Repository mirror tools'
61
)
62

63
# Параметры
64
parser.add_argument('-t', '--type', type=str, default="yum", choices=['yum'], help='repository type (default: %(default)s)')
65
parser.add_argument('-a', '--action', type=str, default="mirror", choices=['mirror', 'check'], help='action (default: %(default)s)')
66
parser.add_argument('-v', '--verbose', action='count', default=0, help='increase verbosity')
67
parser.add_argument('--delete', action=argparse.BooleanOptionalAction, default=True, help='delete extraneous files from repository mirror directory')
68

69

70
# Позиционные аргументы
71
parser.add_argument('url', type=str, action=ValidateUrl, help='Repository URL')
72
parser.add_argument('dir', type=str, help='Repository mirror directory')
73

74

75
args = parser.parse_args()
76

77
repo = provider.repo(args.type, args.url, args.dir, provider.options(args.verbose, delete=args.delete))
78

79
if args.action == 'check':
80
    repo.check()
81
elif args.action == 'mirror':
82
    repo.mirror()
83

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

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

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

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