Skip to content

Commit 31c0238

Browse files
author
erwan35
committed
initial import
0 parents  commit 31c0238

File tree

5 files changed

+171
-0
lines changed

5 files changed

+171
-0
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
linuxmao-software.ini

README.md

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# linuxmao-logiciels.py
2+
3+
# Mais pourquoi ?!
4+
5+
Ce script a été "codé" pour plusieurs raisons :
6+
* aider à suivre les mises à jour des logiciels MAO sur Linux afin de les
7+
annoncer sur https://linuxmao.org et de donner à manger à
8+
http://librazik.tuxfamily.org :)
9+
* me permettre de découvrir le langage python. Etant un un piètre codeur, vos
10+
contributions ou suggestions sont les bienvenues :)
11+
12+
# Installation
13+
* cloner le repository
14+
* Installer les dépendances python (python3-requests et python3-urllib3)
15+
* configurer linuxmao-logiciels.ini avec les identifiants github (le nombre de
16+
requêtes vers l'API est très limité sans être identifié)
17+
18+
# Utilisation
19+
20+
Montrer les options disponibles :
21+
```
22+
./linuxmao-logiciels.py
23+
usage: linuxmao-logiciels.py [-h] [--logiciel LOGICIEL] [--repo REPO]
24+
25+
optional arguments:
26+
-h, --help show this help message and exit
27+
--logiciel LOGICIEL chercher si une logiciel est présent dans la base de
28+
données locale
29+
--repo REPO chercher les maj dans les repos en ligne (repo =
30+
sourceforge, github, ALL)
31+
```
32+
33+
Chercher si un logiciel est présent dans la DB locale :
34+
```
35+
./linuxmao-logiciels.py --logiciel aud
36+
audiveris - 5.1.0 - https://github.com/Audiveris/audiveris/
37+
Audacity - Audacity-2.3.1 - https://github.com/audacity/audacity/
38+
39+
```
40+
41+
Chercher si des logiciels ont été mis à jour sur sourceforge :
42+
```
43+
./linuxmao-logiciels.py --repo sourceforge
44+
wavesurfer - /wavesurfer/1.8.8p5/wavesurfer-1.8.8p5-linux-x86_64.tgz - https://sourceforge.net/projects/wavesurfer/
45+
---
46+
qtractor - /qtractor/0.9.5/qtractor-0.9.5.tar.gz - https://sourceforge.net/projects/qtractor/
47+
---
48+
[...]
49+
50+
```
51+
52+
Chercher si des logiciels ont été mis à jour sur les repos pris en charge :
53+
```
54+
./linuxmao-logiciels.py --repo ALL
55+
56+
```
57+
58+
# TODO

create_db.py

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/python3
2+
3+
import sqlite3
4+
conn = sqlite3.connect('software.db')
5+
6+
c = conn.cursor()
7+
8+
# Create table
9+
c.execute('''CREATE TABLE software
10+
(name text, latest text, date text, desc text, orig text, url text)''')
11+
12+
# Insert a row of data
13+
c.execute("INSERT INTO software VALUES ('adljack','1.1.0','2018-08-13','OPL3/OPN2 synthesizer','github','https://github.com/jpcima/adljack/')")
14+
c.execute("INSERT INTO software VALUES ('dexed','0.9.4','2018-03-19','DX7 synthesizer','github','https://github.com/asb2m10/dexed/')")
15+
16+
# Save (commit) the changes
17+
conn.commit()
18+
19+
# We can also close the connection if we are done with it.
20+
# Just be sure any changes have been committed or they will be lost.
21+
conn.close()

linuxmao-logiciels.py

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
#!/usr/bin/python3
2+
3+
import sqlite3
4+
from urllib.parse import urlparse
5+
import requests
6+
import argparse
7+
import sys
8+
import configparser
9+
10+
# read configuration file
11+
config = configparser.ConfigParser()
12+
config.read('linuxmao-logiciels.ini')
13+
github_user = config['github']['github_user']
14+
github_pass = config['github']['github_pass']
15+
16+
# CLI arguments
17+
parser = argparse.ArgumentParser()
18+
parser.add_argument("--logiciel", help="chercher si une logiciel est présent dans la base de données locale")
19+
parser.add_argument("--repo", help="chercher les maj dans les repos en ligne (repo = sourceforge, github, ALL)")
20+
if len(sys.argv)==1:
21+
parser.print_help(sys.stderr)
22+
sys.exit(1)
23+
args = parser.parse_args()
24+
25+
# Connect to the sqllite DB
26+
conn = sqlite3.connect('software.db')
27+
c = conn.cursor()
28+
29+
# get latest release from github
30+
def get_github_latest():
31+
32+
c.execute("SELECT name,latest,url FROM software WHERE orig='github'")
33+
34+
for row in c.fetchall():
35+
name = row[0]
36+
current_release = row[1]
37+
url = row[2]
38+
print (''+name+' - '+current_release+' - '+url+'')
39+
# parse the URL and extract the path
40+
o = urlparse(url)
41+
# generate the url to query github API and query it
42+
latest_url='https://api.github.com/repos'+o.path+'releases/latest'
43+
#print ('Latest release URL: '+latest_url)
44+
r = requests.get(latest_url, auth=(github_user, github_pass))
45+
# get the latest release
46+
latest_release = r.json()['tag_name']
47+
if current_release != latest_release:
48+
print ("New release available : " +latest_release+ ' / URL: '+url+'releases/')
49+
print ("---")
50+
51+
# get latest release from sourceforge
52+
def get_sourceforge_latest():
53+
54+
c.execute("SELECT name,latest,url FROM software WHERE orig='sourceforge'")
55+
56+
for row in c.fetchall():
57+
name = row[0]
58+
current_release = row[1]
59+
url = row[2]
60+
print (''+name+' - '+current_release+' - '+url+'')
61+
latest_url='https://sourceforge.net/projects/'+name+'/best_release.json'
62+
#print ('Latest release URL: '+latest_url)
63+
r = requests.get(latest_url)
64+
r.json()
65+
# get the latest release
66+
latest_release = r.json()['platform_releases']['linux']['filename']
67+
if current_release != latest_release:
68+
print ("New release available : " +latest_release)
69+
print ("---")
70+
71+
# Look if the software is in the DB
72+
def get_software_in_db(str):
73+
74+
c.execute ("SELECT name,latest,url FROM software WHERE name LIKE ?", ('%{}%'.format(str),))
75+
76+
for row in c.fetchall():
77+
name = row[0]
78+
current_release = row[1]
79+
url = row[2]
80+
print (''+name+' - '+current_release+' - '+url+'')
81+
82+
83+
if args.logiciel:
84+
get_software_in_db(str = args.logiciel)
85+
elif args.repo == 'github':
86+
get_github_latest()
87+
elif args.repo == 'sourceforge':
88+
get_sourceforge_latest()
89+
elif args.repo == 'ALL':
90+
get_github_latest()
91+
get_sourceforge_latest()

software.db

20 KB
Binary file not shown.

0 commit comments

Comments
 (0)