Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Bertille Pesquidoux
TX-collecte-CHATONS
Commits
16cd7dee
Commit
16cd7dee
authored
May 25, 2020
by
Adrien Laporte
Browse files
Split du converter
parent
1a341586
Changes
5
Hide whitespace changes
Inline
Side-by-side
.gitignore
View file @
16cd7dee
crawler/sortie/*
crawler/log.txt
crawler/__pycache__
conversion/__pycache__
site/documentation
conversion/README.md
0 → 100644
View file @
16cd7dee
# Convertisseur entre différents schémas json
## Pourquoi ?
TODO : notre schéma → entraide.chatons.org
## Usage :
```
converter.py [-o OUTPUT] input
```
conversion/convert.py
View file @
16cd7dee
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import
argparse
from
textwrap
import
dedent
import
os
import
json
import
convert_json
def
makeParser
()
->
argparse
.
ArgumentParser
():
"""Permet de créer le argparse initial"""
parser
=
argparse
.
ArgumentParser
()
parser
.
add_argument
(
"input"
,
type
=
argparse
.
FileType
(
"r"
),
help
=
dedent
(
"""Fichier JSON à convertir
"""
),
)
parser
.
add_argument
(
"-o"
,
"--output"
,
type
=
argparse
.
FileType
(
"w"
),
required
=
False
,
help
=
"""Fichier dans lequel exporter les données converties"""
,
)
return
parser
parser
=
makeParser
()
parser
=
convert_json
.
makeParser
()
args
=
parser
.
parse_args
()
# Ouverture des fichiers IO
...
...
@@ -40,159 +18,9 @@ json_output_file = (
)
chaton_keys
=
{
"name"
:
"chaton"
,
"url"
:
"chaton_website"
,
"services"
:
"services"
,
}
service_keys
=
{
"software"
:
"software"
,
# list → str
# "": "type", # Ajouté après coup
"public"
:
"open"
,
"weight"
:
"weight"
,
# Todo
"consent"
:
"consent"
,
# Todo
"degradability"
:
"degradability"
,
"url"
:
"endpoint"
,
"magie_noire"
:
"edit_link"
,
# Kececé ?
}
software_names
=
{
# Générés automatiquement
"cryptpad"
:
"Cryptpad"
,
"darkwire.io"
:
"Darkwire.io"
,
"draw.io"
:
"Draw.io"
,
"easyrtc"
:
"EasyRTC"
,
"ethercalc"
:
"Ethercalc"
,
"etherpad"
:
"Etherpad"
,
"filetolink"
:
"Filetolink"
,
"firefoxsend"
:
"FirefoxSend"
,
"framadate"
:
"Framadate"
,
"libreto"
:
"Libreto"
,
"lstu"
:
"LSTU"
,
"lufi"
:
"Lufi"
,
"lutim"
:
"Lutim"
,
"mycryptochat"
:
"MyCryptoChat"
,
"plik"
:
"Plik"
,
"polr"
:
"Polr"
,
"privatebin"
:
"Privatebin"
,
"rs_short"
:
"rs-short"
,
"scrumblr"
:
"Scrumblr"
,
"strut"
:
"Strut"
,
# ajoutés main :
"mattermost"
:
"Mattermost"
}
software_descriptions
=
{
# Parsés depuis les données du framagit le 24/05/2020
"Lufi"
:
"Partage temporaire de fichiers (alternative à WeTransfer, DropSend)"
,
"Draw.io"
:
"Création de schémas et diagrammes (alternative à Visio)"
,
"Privatebin"
:
"Transfert de messages chiffrés (alternative à PasteBin)"
,
"Etherpad"
:
"Rédaction collaborative (alternative à Google Docs)"
,
"Framadate"
:
"Aide à la prise de rendez-vous (alternative à Doodle)"
,
"Plik"
:
"Partage temporaire de fichiers (alternative à WeTransfer, DropSend)"
,
"EasyRTC"
:
"Visioconférence (alternative à Skype, Hangouts, etc.)"
,
"Cryptpad"
:
"Rédaction collaborative (alternative à Google Docs)"
,
"Filetolink"
:
"Partage temporaire de fichiers (alternative à WeTransfer, DropSend)"
,
"Lutim"
:
"Stockage/partage d'images (alternative à Img.ur)"
,
"FirefoxSend"
:
"Partage temporaire de fichiers (alternative à WeTransfer, DropSend)"
,
"Polr"
:
"Raccourcisseur d'URL (alternative à Bit.ly, tinyurl, etc.)"
,
"LSTU"
:
"Raccourcisseur d'URL (alternative à Bit.ly, tinyurl, etc.)"
,
"Jitsi Meet"
:
"Visioconférence (alternative à Skype, Hangouts, etc.)"
,
"MyCryptoChat"
:
"Chat IRC ou Jabber (alternative à MSN)"
,
"Libreto"
:
"Rédaction collaborative (alternative à Google Docs)"
,
"Darkwire.io"
:
"Chat IRC ou Jabber (alternative à MSN)"
,
"Strut"
:
"Présentation collaborative (alternative à Google Drive)"
,
"Scrumblr"
:
"Tableau blanc collaboratif (alternative à Stoodle)"
,
"Ethercalc"
:
"Tableur collaboratif (alternative à Google Sheets)"
,
"rs-short"
:
"Raccourcisseur d'URL (alternative à Bit.ly, tinyurl, etc.)"
,
# Ajoutés à la main :
}
def
convertDegradability
(
nb
:
int
)
->
str
:
if
nb
==
0
:
return
"Jamais"
elif
nb
<
7
:
return
"1 semaine"
elif
nb
<
6
*
30.5
:
return
"6 mois"
else
:
return
"12 mois"
def
showNode
(
str
):
pass
# print(str)
def
debug
(
str
):
print
(
str
)
def
convertDict
(
d
:
dict
,
context
:
str
=
None
)
->
dict
:
showNode
(
f
"D :
{
d
}
,
{
context
}
"
)
return
{
ck
:
cv
for
(
ck
,
cv
)
in
[
(
convertKey
(
k
,
context
),
convertValue
(
v
,
k
))
for
(
k
,
v
)
in
d
.
items
()
]
if
ck
is
not
None
and
cv
is
not
None
}
def
convertList
(
l
:
list
,
context
:
str
=
None
)
->
list
:
showNode
(
f
"L :
{
l
}
,
{
context
}
"
)
return
[
cv
for
cv
in
[
convertValue
(
item
,
context
)
for
item
in
l
]
if
cv
is
not
None
]
def
convertKey
(
k
:
str
,
context
:
str
=
None
)
->
str
:
showNode
(
f
"K :
{
k
}
,
{
context
}
"
)
if
context
==
"services"
:
return
service_keys
.
get
(
k
,
None
)
return
chaton_keys
.
get
(
k
,
None
)
def
convertStr
(
v
:
str
,
context
:
str
=
None
)
->
str
:
showNode
(
f
"S :
{
v
}
,
{
context
}
"
)
if
context
==
"url"
:
return
v
elif
context
==
"name"
:
return
v
elif
context
==
"software"
:
return
software_names
.
get
(
v
,
None
)
return
None
def
convertInt
(
v
:
int
,
context
:
str
=
None
)
->
str
:
if
context
==
"degradability"
:
return
convertDegradability
(
v
)
return
None
def
convertValue
(
val
,
context
:
str
=
None
):
showNode
(
f
"V :
{
val
}
,
{
context
}
"
)
if
type
(
val
)
is
int
:
return
convertInt
(
val
,
context
)
if
type
(
val
)
is
str
:
return
convertStr
(
val
,
context
)
elif
type
(
val
)
is
dict
:
return
convertDict
(
val
,
context
)
elif
type
(
val
)
is
list
:
return
convertList
(
val
,
context
)
else
:
return
None
with
open
(
json_input_file
,
"r"
,
encoding
=
"utf8"
)
as
input_file
:
input
=
json
.
loads
(
input_file
.
read
())
print
(
input
)
print
()
print
(
convertValue
(
input
))
print
(
convert_json
.
convertValue
(
input
,
"chaton"
))
conversion/convert_json.py
0 → 100644
View file @
16cd7dee
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import
argparse
from
textwrap
import
dedent
from
data
import
conversion
def
makeParser
()
->
argparse
.
ArgumentParser
():
"""Permet de créer le argparse initial"""
parser
=
argparse
.
ArgumentParser
()
parser
.
add_argument
(
"input"
,
type
=
argparse
.
FileType
(
"r"
),
help
=
dedent
(
"""Fichier JSON à convertir
"""
),
)
parser
.
add_argument
(
"-o"
,
"--output"
,
type
=
argparse
.
FileType
(
"w"
),
required
=
False
,
help
=
"""Fichier dans lequel exporter les données converties"""
,
)
return
parser
def
convertDegradability
(
nb
:
int
)
->
str
:
"""Convertir une durée exprimée en int en un texte explicite"""
if
nb
==
0
:
return
"Jamais"
elif
nb
<
7
:
return
"1 semaine"
elif
nb
<
6
*
30.5
:
return
"6 mois"
else
:
return
"12 mois"
def
showNode
(
str
):
# Debug
"""Affiche l'endroit du parcours de graphe"""
pass
# print(str)
def
debug
(
str
):
"""Tout est dit"""
print
(
str
)
def
convertDict
(
d
:
dict
,
context
:
str
=
None
)
->
dict
:
"""Convertir un dictionnaire de notre format en format entraide"""
showNode
(
f
"D :
{
d
}
,
{
context
}
"
)
return
{
ck
:
cv
for
(
ck
,
cv
)
in
[
(
convertKey
(
k
,
context
),
convertValue
(
v
,
k
))
for
(
k
,
v
)
in
d
.
items
()
]
if
ck
is
not
None
and
cv
is
not
None
}
def
convertList
(
l
:
list
,
context
:
str
=
None
)
->
list
:
"""Convertir une liste de notre format en format entraide"""
showNode
(
f
"L :
{
l
}
,
{
context
}
"
)
return
[
cv
for
cv
in
[
convertValue
(
item
,
context
)
for
item
in
l
]
if
cv
is
not
None
]
def
convertKey
(
k
:
str
,
context
:
str
=
None
)
->
str
:
"""Convertir une clé en format entraide grâce au dictionnaire 'conversion'
"""
showNode
(
f
"K :
{
k
}
,
{
context
}
"
)
keyList
=
conversion
[
"keys"
].
get
(
context
,
None
)
if
keyList
is
not
None
:
return
keyList
.
get
(
k
,
None
)
return
None
def
convertStr
(
v
:
str
,
context
:
str
=
None
)
->
str
:
"""Convertir une str en format entraide grâce au dictionnaire 'conversion'
"""
showNode
(
f
"S :
{
v
}
,
{
context
}
"
)
if
context
==
"url"
:
return
v
elif
context
==
"name"
:
return
v
elif
context
==
"software"
:
soft
=
conversion
[
"values"
][
"software"
].
get
(
v
,
None
)
if
soft
is
None
:
print
(
f
"Software
{
soft
}
non-existant"
)
return
soft
return
None
def
convertInt
(
v
:
int
,
context
:
str
=
None
)
->
str
:
"""Convertir un entier en format entraide"""
if
context
==
"degradability"
:
return
convertDegradability
(
v
)
return
None
def
convertValue
(
val
,
context
:
str
=
None
):
"""Convertisseur générique, point d'entrée de la conversion"""
showNode
(
f
"V :
{
val
}
,
{
context
}
"
)
if
type
(
val
)
is
int
:
return
convertInt
(
val
,
context
)
if
type
(
val
)
is
str
:
return
convertStr
(
val
,
context
)
elif
type
(
val
)
is
dict
:
return
convertDict
(
val
,
context
)
elif
type
(
val
)
is
list
:
return
convertList
(
val
,
context
)
else
:
return
None
conversion/data.py
0 → 100644
View file @
16cd7dee
conversion
=
{
"keys"
:
{
"chaton"
:
{
"name"
:
"chaton"
,
"url"
:
"chaton_website"
,
"services"
:
"services"
,
},
"services"
:
{
"software"
:
"software"
,
# list → str
# "": "type", # Ajouté après coup
"public"
:
"open"
,
"weight"
:
"weight"
,
# Todo
"consent"
:
"consent"
,
# Todo
"degradability"
:
"degradability"
,
"url"
:
"endpoint"
,
"magie_noire"
:
"edit_link"
,
# Kececé ?
}
},
"values"
:
{
"software"
:
{
# Générés automatiquement
"cryptpad"
:
"Cryptpad"
,
"darkwire.io"
:
"Darkwire.io"
,
"draw.io"
:
"Draw.io"
,
"easyrtc"
:
"EasyRTC"
,
"ethercalc"
:
"Ethercalc"
,
"etherpad"
:
"Etherpad"
,
"filetolink"
:
"Filetolink"
,
"firefoxsend"
:
"FirefoxSend"
,
"framadate"
:
"Framadate"
,
"libreto"
:
"Libreto"
,
"lstu"
:
"LSTU"
,
"lufi"
:
"Lufi"
,
"lutim"
:
"Lutim"
,
"mycryptochat"
:
"MyCryptoChat"
,
"plik"
:
"Plik"
,
"polr"
:
"Polr"
,
"privatebin"
:
"Privatebin"
,
"rs_short"
:
"rs-short"
,
"scrumblr"
:
"Scrumblr"
,
"strut"
:
"Strut"
,
# ajoutés main :
"mattermost"
:
"Mattermost"
,
}
},
"descriptions"
:
{
"software"
:
{
# Parsés depuis les données du framagit le 24/05/2020
"Lufi"
:
"Partage temporaire de fichiers (alternative à WeTransfer, DropSend)"
,
"Draw.io"
:
"Création de schémas et diagrammes (alternative à Visio)"
,
"Privatebin"
:
"Transfert de messages chiffrés (alternative à PasteBin)"
,
"Etherpad"
:
"Rédaction collaborative (alternative à Google Docs)"
,
"Framadate"
:
"Aide à la prise de rendez-vous (alternative à Doodle)"
,
"Plik"
:
"Partage temporaire de fichiers (alternative à WeTransfer, DropSend)"
,
"EasyRTC"
:
"Visioconférence (alternative à Skype, Hangouts, etc.)"
,
"Cryptpad"
:
"Rédaction collaborative (alternative à Google Docs)"
,
"Filetolink"
:
"Partage temporaire de fichiers (alternative à WeTransfer, DropSend)"
,
"Lutim"
:
"Stockage/partage d'images (alternative à Img.ur)"
,
"FirefoxSend"
:
"Partage temporaire de fichiers (alternative à WeTransfer, DropSend)"
,
"Polr"
:
"Raccourcisseur d'URL (alternative à Bit.ly, tinyurl, etc.)"
,
"LSTU"
:
"Raccourcisseur d'URL (alternative à Bit.ly, tinyurl, etc.)"
,
"Jitsi Meet"
:
"Visioconférence (alternative à Skype, Hangouts, etc.)"
,
"MyCryptoChat"
:
"Chat IRC ou Jabber (alternative à MSN)"
,
"Libreto"
:
"Rédaction collaborative (alternative à Google Docs)"
,
"Darkwire.io"
:
"Chat IRC ou Jabber (alternative à MSN)"
,
"Strut"
:
"Présentation collaborative (alternative à Google Drive)"
,
"Scrumblr"
:
"Tableau blanc collaboratif (alternative à Stoodle)"
,
"Ethercalc"
:
"Tableur collaboratif (alternative à Google Sheets)"
,
"rs-short"
:
"Raccourcisseur d'URL (alternative à Bit.ly, tinyurl, etc.)"
,
# Ajoutés à la main :
}
}
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment