123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #
- """
- The MIT License (MIT)
- Copyright (c) Andrew Brookes 2021
- andybrookestar[small snail]gmail[period]com
- aka captainsensible
- aka andybrookestar
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
- documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom
- the Software is furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
- INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- See https://opensource.org/licenses/MIT for details
- """
- import operator
- from operator import itemgetter
- import requests
- import time
- import os
- import tkinter as tk
- from tkinter import ttk
- import re
- import sys
- from tkinter.messagebox import showinfo
- from tkinter import font
- user = os.getenv("SUDO_USER")
- if user is None:
- print (" re-run this program using 'sudo'" )
- sys.exit()
- Worldwide1="""#Server = http://mirror.rackspace.com/archlinux/$repo/os/$arch
- #Server = https://mirror.rackspace.com/archlinux/$repo/os/$arch
- """
- # next def is evoked by process button
- def button_clicked():
- var.set('ok working on it ')
- # res = requests.get('https://archlinux.org/mirrorlist/all/')
- t=selected.get()
- print(t)
- #choice 1 populate mirrorlist none enabled
- if t =="1":
- res = requests.get('https://archlinux.org/mirrorlist/all/')
- myvar= res.text
- file = open('/etc/pacman.d/mirrorlist' , 'w')
- file.write(myvar)
- file.close()
- var.set("done ")
- #choice 2 populate and enable all
- elif t =='2':
- res = requests.get('https://archlinux.org/mirrorlist/all/')
- myvar= res.text
- newvar = re.sub(r'[#](?!#)', " ", myvar)
- file = open('/etc/pacman.d/mirrorlist' , 'w')
- file.write(newvar)
- file.close()
- var.set("done ")
-
- elif t=='3':
-
- d= countries.get()
- if d=="select nearest Country":
- var.set("please also choose a country from drop down")
-
- elif d=="Worldwide":
- t=countryMirrors(Worldwide1)
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="Australia":
- t=countryMirrorsLive('AU')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="Austria":
- t=countryMirrorsLive('AT')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
- elif d=="Bangladesh":
- t=countryMirrorsLive('BD')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="Belarus":
- t=countryMirrorsLive('BY')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="Belgium":
- t=countryMirrorsLive('BE')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="BosniaNHezegovia":
- t=countryMirrorsLive('BA')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
- elif d=="Brazil":
- t=countryMirrorsLive('BR')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="Bulgaria":
- t=countryMirrorsLive('BG')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Cambodia":
- t=countryMirrorsLive('KH')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Canada":
- t=countryMirrorsLive('CA')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="Chile":
- t=countryMirrorsLive('CL')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
- elif d=="China":
- t=countryMirrorsLive('CN')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
- elif d=="Colombia":
- t=countryMirrorsLive('CO')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="Croatia":
- t=countryMirrorsLive('HR')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
- elif d=="Czechia":
- t=countryMirrorsLive('CZ')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="Denmark":
- t=countryMirrorsLive('DK')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="Ecuador":
- t=countryMirrorsLive('EC')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
- elif d=="Estonia":
- t=countryMirrorsLive('EE')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
- elif d=="Finland":
- t=countryMirrorsLive('FL')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
- elif d=="France":
- t=countryMirrorsLive('FR')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
- elif d=="Georgia":
- t=countryMirrorsLive('GE')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Germany":
- t=countryMirrorsLive('DE')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Greece":
- t=countryMirrorsLive('GR')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="HongKong":
- t=countryMirrorsLive('HK')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="Hungary":
- t=countryMirrorsLive('HU')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="Iceland":
- t=countryMirrorsLive('IS')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
- elif d=="India":
- t=countryMirrorsLive('IN')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Indonesia":
- t=countryMirrorsLive('ID')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
- elif d=="Iran":
- t=countryMirrorsLive('IR')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="Ireland":
- t=countryMirrorsLive('IE')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Israel":
- t=countryMirrorsLive('IL')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Italy":
- t=countryMirrorsLive('IT')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Japan":
- t=countryMirrorsLive('JP')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Kazakhstan":
- t=countryMirrorsLive('KZ')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Kenya":
- t=countryMirrorsLive('KE')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="Latvia":
- t=countryMirrorsLive('LV')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Lithuania":
- t=countryMirrorsLive('LT')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
- elif d=="Luxembourg":
- t=countryMirrorsLive('LU')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Mexico":
- t=countryMirrorsLive('MX')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Moldova":
- t=countryMirrorsLive('MD')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="Monaco":
- t=countryMirrorsLive('MC')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
- elif d=="Netherlands":
- t=countryMirrorsLive('NL')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="NewCaledonia":
- t=countryMirrorsLive('NC')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
- elif d=="NewZealand":
- t=countryMirrors('NZ')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
- elif d=="North Macedonia":
- t=countryMirrorsLive('MK')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Norway":
- t=countryMirrorsLive('NO')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
-
- elif d=="Pakistan":
- t=countryMirrorsLive('PK')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
- elif d=="Paraguay":
- t=countryMirrorsLive('PY')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Poland":
- t=countryMirrorsLive('PL')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Portugal":
- t=countryMirrorsLive('PT')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Romania":
- t=countryMirrorsLive('RO')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="'Russia":
- t=countryMirrorsLive('RU')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
- elif d=="Reunion":
- t=countryMirrorsLive('RE')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Serbia":
- t=countryMirrorsLive('RS')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
- elif d=="Singapore":
- t=countryMirrorsLive('SG')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
- elif d=="Slovakia":
- t=countryMirrorsLive('SK')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
- elif d=="Slovenia":
- t=countryMirrorsLive('SI')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="South Africa":
- t=countryMirrorsLive('ZA')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
- elif d=="South Korea":
- t=countryMirrorsLive('KR')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
- elif d=="Spain":
- t=countryMirrorsLive('ES')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
- elif d=="Sweden":
- t=countryMirrorsLive('SE')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
- elif d=="Switzerland":
- t=countryMirrorsLive('CH')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
-
- elif d=="Taiwan":
- t=countryMirrorsLive('TW')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
-
- elif d=="Thailand":
- t=countryMirrorsLive('TH')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Turkey":
- t=countryMirrorsLive('TR')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Ukraine":
- t=countryMirrorsLive('UA')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="United Kingdom":
- t=countryMirrorsLive('GB')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="USA":
- t=countryMirrorsLive('US')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- elif d=="Vietnam":
- t=countryMirrorsLive('VN')
- if t =="done":
- var.set("done written to /etc/pacman.d/mirrorlist")
-
-
- else:
-
- print ("i have no clue what you picked")
-
-
-
-
-
- # here do all filtering of string get time elapsed and write to /etc/pacman.d/mirrors
- def countryMirrorsLive(somevar):
- myVar=somevar
- myDic ={}
- res=requests.get('https://archlinux.org/mirrorlist/?country='+myVar)
- mirrorString =res.text
- lines= mirrorString.splitlines()
- for line in lines:
-
-
- z= re.match(r'[#](?!#)',line)
- if z:
- print(line)
- t=re.sub(r'(#Server\s=)', "",line)
- try:
- times=(requests.get(t,timeout=2).elapsed.total_seconds())
- myDic[t]=times
- except:
- print ("something went wrong")
-
-
- print(t)
- print(myDic)
- sort_dict= dict(sorted(myDic.items(), key=operator.itemgetter(1)))
- print("Sorted Dictionary by value: ", sort_dict)
- file2 = open('/etc/pacman.d/mirrorlist','w')
-
- for k, v in sort_dict.items():
- print(k)
- try:
- file2.write('Server = '+ k+'\n')
- except:
- print("a problem occured")
- file2.close()
- process="done"
- return process
-
-
-
-
- # above filters out two ## together
-
- def countryMirrors(someVar):
- # here could put all processing
- stringOfMirrorsNoHash = ""
- myDic= {}
- stringOfMirrorsNoHash = re.sub(r'^[##\s]', " ", someVar)
- stringOfMirrorsNoHash2 = re.sub(r'(Server\s=)', "", stringOfMirrorsNoHash )
-
- print(stringOfMirrorsNoHash2)
-
- lines = stringOfMirrorsNoHash2.splitlines()
- for t in lines:
- try:
- times=(requests.get(t,timeout=3).elapsed.total_seconds())
- myDic[t]=times
-
- except:
- print ("there is a problem")
-
-
- print(myDic)
- sort_dict= dict(sorted(myDic.items(), key=operator.itemgetter(1)))
- print("Sorted Dictionary by value: ", sort_dict)
- file2 = open('/etc/pacman.d/mirrorlist','w')
-
- for k, v in sort_dict.items():
- print(k)
- try:
- file2.write('Server = '+ k+'\n')
- except:
- print("a problem occured")
- file2.close()
- process="done"
- return process
-
-
- def radio_selected():
- t= selected.get()
- print(t)
- var.set("waiting")
-
-
- def testButtonClicked():
- print('test button cloicked')
- var.set("ok working on it")
-
- def countryPicked(event):
- d=countries.get()
- print(d)
- var.set(' waiting for process button to be clicked')
- def _quit():
- root.quit()
- root.destroy()
-
- """ root """
- root = tk.Tk()
- root.geometry('500x420')
- root.resizable(True,True)
- root.title('fetchMirrorsGui')
- root.columnconfigure(0,weight=3)
- root.columnconfigure(1,weight=1)
- root.columnconfigure(2,weight=1)
- root.rowconfigure(0,weight=1)
- root.rowconfigure(1,weight=1)
- root.rowconfigure(2,weight=1)
- root.rowconfigure(3,weight=1)
- root.rowconfigure(4,weight =1)
- root.rowconfigure(5,weight =1)
- root.configure(background='LemonChiffon2')
- root.option_add("*background", "PaleGoldenrod"),
- root.option_add("*foreground", "purple"),
- """ style """
- style= ttk.Style()
- style.configure('TButton',foreground=[("black")],background=["LightGoldenrod1"])
- style.map('TButton', foreground=[('hover', 'black')], background=[('hover', 'LimeGreen')])
- style.configure("TCombobox", foreground= "purple", activebackground= "purple", font=('Helvetica', 14))
- style.map('TCombobox', foreground=[('pressed', 'red'), ('active', 'blue')])
- style.map('TCombobox', foreground=[('hover', 'red')], background=[('hover', 'yellow')])
- style.configure('TCheckbutton',foreground=[("black")],background=["brown"])
- style.map('TCheckbutton', foreground=[('hover', 'black')], background=[('hover', 'yellow')])
- HighlightFont = font.Font(family='Times', size=12, weight='bold')
- topLable = ttk.Label(root, text =""" Radio button 1 for whole mirror list (needs editing to enable) \n
- Radio 2 same but all enabled and .... \n for your Country (or nearest) \n
- click radio button 3 first ..then select a Country from drop down list \n
- Then as in all 3 cases click button to process """, background='ivory',foreground ="black" , font=HighlightFont)
- topLable.grid(column=0,row= 0,columnspan=3)
- """label next yellow button """
- var = tk.StringVar()
- var.set('waiting to process')
- """ radio 1 label """
- l = ttk.Label(root, text ="populate mirror list and do manual edit to \n activate mirror you want (1) -> ", background='LemonChiffon',foreground ="black" )
- l.grid(column=0,row=1)
- """ radio 1"""
- selected = tk.StringVar()
- selected.set('2')
- """ radio 2 label """
- label = ttk.Label(root, text="populate and have all mirrors enabled (2)->", background='LemonChiffon', foreground='black')
- label.grid(column=0,row=2)
- inform = ttk.Label(root, textvariable =var , background='gray84', foreground='black', font=HighlightFont)
- inform.grid(column=0,row=4)
- """ radio buttons """
- r = ttk.Radiobutton(root,text='1', value='1', variable=selected,command=radio_selected)
- r.grid(column=1, row=1 )
- s = ttk.Radiobutton(root,text='2', value='2', variable=selected,command=radio_selected)
- s.grid(column=1,row=2)
- t= ttk.Radiobutton(root,text='3', value='3', variable=selected,command=radio_selected)
- t.grid(column=1, row=3)
- """process button"""
- Button1 = ttk.Button(root, text='Process Above Selection',command=button_clicked)
- Button1.grid(column=0,row=5,columnspan=2)
- """ country combobox """
-
- countryVar = tk.StringVar()
- countries =ttk.Combobox(root, textvariable= countryVar)
- countryVar.set("select nearest Country")
- countries.grid(column= 0, row =3)
- countries['values']= ('Worldwide','Australia','Austria','Bangladesh' ,'Belarus','Belgium','BosniaNHezegovia',\
- 'Brazil', 'Bulgaria', 'Canada','Chile','China','Colombia','Combodia','Croatia','Czechia','Denmark','Ecuador',\
- 'Estonia','Finland','France','Georgia','Germany','Greece','HongKong','Hungary','Iceland','India','Indonesia','iran','Ireland',\
- 'Israel','Italy','Japan','Kazakhstan', 'Kenya', 'Latvia','Lithuania','Luxembourg','Mexico', 'Moldova','Monaco','Netherlands','NewCaledonia',\
- 'NewZealand','North Macedonia','Norway','Pakistan','Paraguay','Poland','Portugal','Romania','Russia','Reunion','Serbia',\
- 'Singapore','Slovakia','Slovenia','South Africa','South Korea','Spain','Sweden','Switzerland','Taiwan'\
- 'Thailand','Turkey','Ukraine','United Kingdom','USA','Vietnam' )
- countries.bind('<<ComboboxSelected>>',countryPicked)
- """ testButton
- testButton = ttk.Button(root, text='test event button', command=lambda: button_clicked())
- testButton.grid(column=1,row=4)
- """
- """ green exit button """
- exit_button = ttk.Button(root, text="Exit", command=_quit)
- exit_button.grid(column=2,row=5)
- root.mainloop()
|