Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Paste
P8610
Script to load template mapping json to sqlite database
Active
Public
Actions
Authored by
•
santhosh
on Jun 13 2019, 11:22 AM.
Edit Paste
Archive Paste
View Raw File
Subscribe
Mute Notifications
Award Token
Flag For Later
Tags
ContentTranslation
Referenced Files
F29506791: raw.txt
Jun 13 2019, 11:22 AM
2019-06-13 11:22:59 (UTC+0)
Subscribers
None
const
fs
=
require
(
'fs'
),
ArgumentParser
=
require
(
'argparse'
).
ArgumentParser
,
sqlite
=
require
(
'sqlite'
);
// https://github.com/kriasoft/node-sqlite
async
function
createTemplate
(
db
,
from
,
to
,
templateName
)
{
const
mapping
=
await
db
.
get
(
`SELECT rowid FROM templates
WHERE source_lang = ? AND target_lang = ? AND template =?`
,
from
,
to
,
templateName
);
if
(
mapping
&&
mapping
.
rowid
)
{
return
mapping
.
rowid
}
const
result
=
await
db
.
run
(
`INSERT OR IGNORE INTO templates
(source_lang, target_lang, template) VALUES(?,?,?)`
,
from
,
to
,
templateName
);
return
result
.
lastID
;
}
async
function
main
(
databaseFile
,
mapping
,
from
,
to
)
{
const
db
=
await
sqlite
.
open
(
databaseFile
,
{
Promise
});
await
db
.
run
(
`CREATE TABLE IF NOT EXISTS templates (
source_lang TEXT NOT NULL,
target_lang TEXT NOT NULL,
template TEXT NOT NULL,
UNIQUE(source_lang, target_lang, template)
)`
);
await
db
.
run
(
`CREATE TABLE IF NOT EXISTS mapping (
template_mapping_id INTEGER NOT NULL,
source_param TEXT NOT NULL,
target_param TEXT NOT NULL,
score REAL NOT NULL,
UNIQUE(template_mapping_id, source_param, target_param)
)`
);
for
(
const
templateName
in
mapping
)
{
let
mappingId
,
mappingData
=
mapping
[
templateName
];
mappingId
=
await
createTemplate
(
db
,
from
,
to
,
templateName
);
console
.
log
(
`
${
mappingId
}
${
from
}
${
to
}
${
templateName
}
`
);
for
(
let
index
in
mappingData
)
{
let
paramMapping
=
mappingData
[
index
];
if
(
!
mappingId
||
!
paramMapping
[
from
]
||
!
paramMapping
[
to
])
{
continue
;
}
await
db
.
run
(
`INSERT OR IGNORE INTO mapping
(template_mapping_id, source_param, target_param, score)
VALUES(?,?,?,?)`
,
mappingId
,
paramMapping
[
from
],
paramMapping
[
to
],
paramMapping
.
d
)
console
.
log
(
`
${
paramMapping
[
from
]
}
->
${
paramMapping
[
to
]
}
[
${
paramMapping
.
d
}
]`
);
}
}
await
db
.
close
()
};
const
argparser
=
new
ArgumentParser
({
addHelp
:
true
,
description
:
'Prepare template mapping database'
});
argparser
.
addArgument
(
[
'-d'
,
'--database'
],
{
help
:
'template mapping database file'
,
defaultValue
:
'templatemapping.db'
}
);
argparser
.
addArgument
(
[
'-i'
,
'--input'
],
{
help
:
'JSON file with mapping.'
,
required
:
true
}
);
argparser
.
addArgument
(
[
'--from'
],
{
help
:
'Source language'
,
required
:
true
}
);
argparser
.
addArgument
(
[
'--to'
],
{
help
:
'Target language'
,
required
:
true
}
);
const
args
=
argparser
.
parseArgs
();
const
databaseFile
=
args
.
database
;
const
input
=
args
.
input
;
if
(
!
fs
.
existsSync
(
input
))
{
throw
Error
(
`File
${
input
}
does not exist`
);
}
const
mapping
=
JSON
.
parse
(
fs
.
readFileSync
(
input
));
main
(
databaseFile
,
mapping
,
args
.
from
,
args
.
to
)
Event Timeline
•
santhosh
created this paste.
Jun 13 2019, 11:22 AM
2019-06-13 11:22:59 (UTC+0)
•
santhosh
mentioned this in
T224721: Integrate template parameter alignments in Content Translation to improve automatic template support
.
Log In to Comment