Pulling YML files brings outdated values
bernawil opened this issue · 7 comments
I am seeing key values coming with outdated values after pulling yml files after a push.
To test this I created a test project
this is my .phraseapp
phraseapp:
access_token: my-token
project_id: 1afcb9912f3e68c4777275e78cd18512
push:
sources:
- file: ./config/locales/en.yml
params:
locale_id: en
file_format: yml
update_translations: true
update_descriptions: true
pull:
targets:
- file: ./config/locales/<locale_name>.yml
params:
file_format: yml
this is my en.yml
en:
first_key:
nest_2:
empty: text 3
value:
one: one - THIS HAS BEEN UPDATED
fourth_key:
nest: some text 2
nest_2:
empty: text 3
second_key:
value:
one: two
third_key: some text 2
There, I update first_key.value.one
en:
first_key:
nest_2:
empty: text 3
value:
one: one - THIS HAS BEEN UPDATED
Then push the changes:
phrase push
Uploading config/locales/en.yml... done!
Check upload Id: dd76d44b6f841236f238d4f21f901179, filename: en.yml for information about processing results: https://app.phrase.com/accounts/imkey-bv/projects/bernardo-test/uploads/dd76d44b6f841236f238d4f21f901179
Now, pull those changes and en.yml comes with the value outdated. To double, check I download the file directly.
phrase locales download --id en --project_id 1afcb9912f3e68c4777275e78cd18512 --file_format yml
---
en:
first_key:
nest_2:
empty: text 3
value:
one: one
fourth_key:
nest: some text 2
nest_2:
empty: text 3
second_key:
value:
one: two
third_key: some text 2
Result: first_key.value.one still outdated
Now, try downloading simple_json.
phrase locales download --id en --project_id 1afcb9912f3e68c4777275e78cd18512 --file_format simple_json
{
"first_key.nest_2.empty": "text 3",
"first_key.value": {
"one": "one - THIS HAS BEEN UPDATED"
},
"first_key.value.one": "one",
"fourth_key.nest": "some text 2",
"fourth_key.nest_2.empty": "text 3",
"second_key.value": {
"one": "two"
},
"second_key.value.one": "two",
"third_key": "some text 2"
}
first_key.value.one is now up to date!
This mirrors what happens in the Web UI: the editor shows updated values and downloading simple json format too. But downloading yml brings these outdated values.
This looks something wrong in the conversion between the data representation and yml format instead of the data persistence itself. For the record, I see similar outdated values in other formats like json (simple json is correct).
Hi @bernawil, uploads are processed in the background and it can take from a few seconds to a few minutes until the content is updated the project. What you could try is running phrase push --wait
. This will make the command wait until the uploads have been processed
Could it be a pluralization problem? AFAIK, JSON exports show plurals as leaves (.one
, .zero
, .many
...) in the document tree, and it's indistinguishable from an actual key which contains .one
in its name. So, a pluralized key named foo
and a non-pluralized key named foo.one
would result with clashing JSON values.
@bernawil make sure you don't combine pluralized keys with keys named .one
etc.
Could it be a pluralization problem? AFAIK, JSON exports show plurals as leaves (
.one
,.zero
,.many
...) in the document tree, and it's indistinguishable from an actual key which contains.one
in its name. So, a pluralized key namedfoo
and a non-pluralized key namedfoo.one
would result with clashing JSON values.@bernawil make sure you don't combine pluralized keys with keys named
.one
etc.
I doubt it, I created that example to reproduce the issue, but I've seen it happen with keys named differently too.
Anyway, if that was the case then the API should validate against such naming.
The naming itself isn't wrong. It just doesn't go well when combined with pluralization and nested export/import.
"first_key.value": {
"one": "one - THIS HAS BEEN UPDATED"
},
"first_key.value.one": "one",
There's the problem, you have two keys which result with the same part in the nested export/import file.
The naming itself isn't wrong. It just doesn't go well when combined with pluralization and nested export/import.
"first_key.value": { "one": "one - THIS HAS BEEN UPDATED" }, "first_key.value.one": "one",
There's the problem, you have two keys which result with the same part in the nested export/import file.
Again, I'm seeing the same with other keys, this was just a test to catch it.
But then, this is obviously a bug in the API, it shouldn't let you push something that causes this, or at least throw a warning.
The naming itself isn't wrong. It just doesn't go well when combined with pluralization and nested export/import.
"first_key.value": { "one": "one - THIS HAS BEEN UPDATED" }, "first_key.value.one": "one",
There's the problem, you have two keys which result with the same part in the nested export/import file.
@jablan just noticed this:
this is the original en.yml I push:
en:
first_key:
nest_2:
empty: text 3
value:
one: one - THIS HAS BEEN UPDATED
there's only one first_key.value.one. The simple json shows both a "first_key.value.one" and an object leaf with the same. One updated, the other not.
"first_key.value": {
"one": "one - THIS HAS BEEN UPDATED"
},
"first_key.value.one": "one",
There's obviously something wrong the yml parsing that makes duplicated keys.