mirror of
https://github.com/chatmail/core.git
synced 2026-05-03 13:26:28 +03:00
Autoformat create-provider-data-rs.py
This commit is contained in:
@@ -11,15 +11,17 @@ out_domains = ""
|
|||||||
out_ids = ""
|
out_ids = ""
|
||||||
domains_set = set()
|
domains_set = set()
|
||||||
|
|
||||||
|
|
||||||
def camel(name):
|
def camel(name):
|
||||||
words = name.split("_")
|
words = name.split("_")
|
||||||
return "".join(w.capitalize() for i, w in enumerate(words))
|
return "".join(w.capitalize() for i, w in enumerate(words))
|
||||||
|
|
||||||
|
|
||||||
def cleanstr(s):
|
def cleanstr(s):
|
||||||
s = s.strip()
|
s = s.strip()
|
||||||
s = s.replace("\n", " ")
|
s = s.replace("\n", " ")
|
||||||
s = s.replace("\\", "\\\\")
|
s = s.replace("\\", "\\\\")
|
||||||
s = s.replace("\"", "\\\"")
|
s = s.replace('"', '\\"')
|
||||||
return s
|
return s
|
||||||
|
|
||||||
|
|
||||||
@@ -64,7 +66,13 @@ def process_config_defaults(data):
|
|||||||
config_defaults = data.get("config_defaults", "")
|
config_defaults = data.get("config_defaults", "")
|
||||||
for key in config_defaults:
|
for key in config_defaults:
|
||||||
value = str(config_defaults[key])
|
value = str(config_defaults[key])
|
||||||
defaults += " ConfigDefault { key: Config::" + camel(key) + ", value: \"" + value + "\" },\n"
|
defaults += (
|
||||||
|
" ConfigDefault { key: Config::"
|
||||||
|
+ camel(key)
|
||||||
|
+ ', value: "'
|
||||||
|
+ value
|
||||||
|
+ '" },\n'
|
||||||
|
)
|
||||||
defaults += " ])"
|
defaults += " ])"
|
||||||
return defaults
|
return defaults
|
||||||
|
|
||||||
@@ -88,11 +96,11 @@ def process_data(data, file):
|
|||||||
raise TypeError("domain used twice: " + domain)
|
raise TypeError("domain used twice: " + domain)
|
||||||
domains_set.add(domain)
|
domains_set.add(domain)
|
||||||
|
|
||||||
domains += " (\"" + domain + "\", &*" + file2varname(file) + "),\n"
|
domains += ' ("' + domain + '", &*' + file2varname(file) + "),\n"
|
||||||
comment += domain + ", "
|
comment += domain + ", "
|
||||||
|
|
||||||
ids = ""
|
ids = ""
|
||||||
ids += " (\"" + file2id(file) + "\", &*" + file2varname(file) + "),\n"
|
ids += ' ("' + file2id(file) + '", &*' + file2varname(file) + "),\n"
|
||||||
|
|
||||||
server = ""
|
server = ""
|
||||||
has_imap = False
|
has_imap = False
|
||||||
@@ -120,8 +128,19 @@ def process_data(data, file):
|
|||||||
if username_pattern != "EMAIL" and username_pattern != "EMAILLOCALPART":
|
if username_pattern != "EMAIL" and username_pattern != "EMAILLOCALPART":
|
||||||
raise TypeError("bad username pattern")
|
raise TypeError("bad username pattern")
|
||||||
|
|
||||||
server += (" Server { protocol: " + protocol.capitalize() + ", socket: " + socket.capitalize() + ", hostname: \""
|
server += (
|
||||||
+ hostname + "\", port: " + str(port) + ", username_pattern: " + username_pattern.capitalize() + " },\n")
|
" Server { protocol: "
|
||||||
|
+ protocol.capitalize()
|
||||||
|
+ ", socket: "
|
||||||
|
+ socket.capitalize()
|
||||||
|
+ ', hostname: "'
|
||||||
|
+ hostname
|
||||||
|
+ '", port: '
|
||||||
|
+ str(port)
|
||||||
|
+ ", username_pattern: "
|
||||||
|
+ username_pattern.capitalize()
|
||||||
|
+ " },\n"
|
||||||
|
)
|
||||||
|
|
||||||
opt = process_opt(data)
|
opt = process_opt(data)
|
||||||
config_defaults = process_config_defaults(data)
|
config_defaults = process_config_defaults(data)
|
||||||
@@ -133,12 +152,16 @@ def process_data(data, file):
|
|||||||
before_login_hint = cleanstr(data.get("before_login_hint", ""))
|
before_login_hint = cleanstr(data.get("before_login_hint", ""))
|
||||||
after_login_hint = cleanstr(data.get("after_login_hint", ""))
|
after_login_hint = cleanstr(data.get("after_login_hint", ""))
|
||||||
if (not has_imap and not has_smtp) or (has_imap and has_smtp):
|
if (not has_imap and not has_smtp) or (has_imap and has_smtp):
|
||||||
provider += "static " + file2varname(file) + ": Lazy<Provider> = Lazy::new(|| Provider {\n"
|
provider += (
|
||||||
provider += " id: \"" + file2id(file) + "\",\n"
|
"static "
|
||||||
|
+ file2varname(file)
|
||||||
|
+ ": Lazy<Provider> = Lazy::new(|| Provider {\n"
|
||||||
|
)
|
||||||
|
provider += ' id: "' + file2id(file) + '",\n'
|
||||||
provider += " status: Status::" + status.capitalize() + ",\n"
|
provider += " status: Status::" + status.capitalize() + ",\n"
|
||||||
provider += " before_login_hint: \"" + before_login_hint + "\",\n"
|
provider += ' before_login_hint: "' + before_login_hint + '",\n'
|
||||||
provider += " after_login_hint: \"" + after_login_hint + "\",\n"
|
provider += ' after_login_hint: "' + after_login_hint + '",\n'
|
||||||
provider += " overview_page: \"" + file2url(file) + "\",\n"
|
provider += ' overview_page: "' + file2url(file) + '",\n'
|
||||||
provider += " server: vec![\n" + server + " ],\n"
|
provider += " server: vec![\n" + server + " ],\n"
|
||||||
provider += " opt: " + opt + ",\n"
|
provider += " opt: " + opt + ",\n"
|
||||||
provider += " config_defaults: " + config_defaults + ",\n"
|
provider += " config_defaults: " + config_defaults + ",\n"
|
||||||
@@ -148,7 +171,9 @@ def process_data(data, file):
|
|||||||
raise TypeError("SMTP and IMAP must be specified together or left out both")
|
raise TypeError("SMTP and IMAP must be specified together or left out both")
|
||||||
|
|
||||||
if status != "OK" and before_login_hint == "":
|
if status != "OK" and before_login_hint == "":
|
||||||
raise TypeError("status PREPARATION or BROKEN requires before_login_hint: " + file)
|
raise TypeError(
|
||||||
|
"status PREPARATION or BROKEN requires before_login_hint: " + file
|
||||||
|
)
|
||||||
|
|
||||||
# finally, add the provider
|
# finally, add the provider
|
||||||
global out_all, out_domains, out_ids
|
global out_all, out_domains, out_ids
|
||||||
@@ -172,7 +197,7 @@ def process_file(file):
|
|||||||
|
|
||||||
def process_dir(dir):
|
def process_dir(dir):
|
||||||
print("processing directory: {}".format(dir), file=sys.stderr)
|
print("processing directory: {}".format(dir), file=sys.stderr)
|
||||||
files = sorted(f for f in dir.iterdir() if f.suffix == '.md')
|
files = sorted(f for f in dir.iterdir() if f.suffix == ".md")
|
||||||
for f in files:
|
for f in files:
|
||||||
process_file(f)
|
process_file(f)
|
||||||
|
|
||||||
@@ -181,31 +206,41 @@ if __name__ == "__main__":
|
|||||||
if len(sys.argv) < 2:
|
if len(sys.argv) < 2:
|
||||||
raise SystemExit("usage: update.py DIR_WITH_MD_FILES > data.rs")
|
raise SystemExit("usage: update.py DIR_WITH_MD_FILES > data.rs")
|
||||||
|
|
||||||
out_all = ("// file generated by src/provider/update.py\n\n"
|
out_all = (
|
||||||
"use crate::provider::Protocol::*;\n"
|
"// file generated by src/provider/update.py\n\n"
|
||||||
"use crate::provider::Socket::*;\n"
|
"use crate::provider::Protocol::*;\n"
|
||||||
"use crate::provider::UsernamePattern::*;\n"
|
"use crate::provider::Socket::*;\n"
|
||||||
"use crate::provider::{\n"
|
"use crate::provider::UsernamePattern::*;\n"
|
||||||
" Config, ConfigDefault, Oauth2Authorizer, Provider, ProviderOptions, Server, Status,\n"
|
"use crate::provider::{\n"
|
||||||
"};\n"
|
" Config, ConfigDefault, Oauth2Authorizer, Provider, ProviderOptions, Server, Status,\n"
|
||||||
"use std::collections::HashMap;\n\n"
|
"};\n"
|
||||||
"use once_cell::sync::Lazy;\n\n")
|
"use std::collections::HashMap;\n\n"
|
||||||
|
"use once_cell::sync::Lazy;\n\n"
|
||||||
|
)
|
||||||
|
|
||||||
process_dir(Path(sys.argv[1]))
|
process_dir(Path(sys.argv[1]))
|
||||||
|
|
||||||
out_all += "pub(crate) static PROVIDER_DATA: Lazy<HashMap<&'static str, &'static Provider>> = Lazy::new(|| [\n"
|
out_all += "pub(crate) static PROVIDER_DATA: Lazy<HashMap<&'static str, &'static Provider>> = Lazy::new(|| [\n"
|
||||||
out_all += out_domains;
|
out_all += out_domains
|
||||||
out_all += "].iter().copied().collect());\n\n"
|
out_all += "].iter().copied().collect());\n\n"
|
||||||
|
|
||||||
out_all += "pub(crate) static PROVIDER_IDS: Lazy<HashMap<&'static str, &'static Provider>> = Lazy::new(|| [\n"
|
out_all += "pub(crate) static PROVIDER_IDS: Lazy<HashMap<&'static str, &'static Provider>> = Lazy::new(|| [\n"
|
||||||
out_all += out_ids;
|
out_all += out_ids
|
||||||
out_all += "].iter().copied().collect());\n\n"
|
out_all += "].iter().copied().collect());\n\n"
|
||||||
|
|
||||||
if len(sys.argv) < 3:
|
if len(sys.argv) < 3:
|
||||||
now = datetime.datetime.utcnow()
|
now = datetime.datetime.utcnow()
|
||||||
else:
|
else:
|
||||||
now = datetime.datetime.fromisoformat(sys.argv[2])
|
now = datetime.datetime.fromisoformat(sys.argv[2])
|
||||||
out_all += "pub static PROVIDER_UPDATED: Lazy<chrono::NaiveDate> = "\
|
out_all += (
|
||||||
"Lazy::new(|| chrono::NaiveDate::from_ymd_opt("+str(now.year)+", "+str(now.month)+", "+str(now.day)+").unwrap());\n"
|
"pub static PROVIDER_UPDATED: Lazy<chrono::NaiveDate> = "
|
||||||
|
"Lazy::new(|| chrono::NaiveDate::from_ymd_opt("
|
||||||
|
+ str(now.year)
|
||||||
|
+ ", "
|
||||||
|
+ str(now.month)
|
||||||
|
+ ", "
|
||||||
|
+ str(now.day)
|
||||||
|
+ ").unwrap());\n"
|
||||||
|
)
|
||||||
|
|
||||||
print(out_all)
|
print(out_all)
|
||||||
|
|||||||
Reference in New Issue
Block a user