This phabricator task for fixing two separate bugs in handling commons files where mediainfo doesn't exist.these.
**Bug 1 is that there is no handling for missing mediainfo. Also there is no method for creating empty mediainfo.**
Code
```lang=python
gen = pagegenerators.RecentChangesPageGenerator(
site=self.site,
namespaces=[6], # File namespace
changetype="new",
total=100
)
"""Seek to first page without mediainfo."""
for page in gen:
if not 'mediainfo' in page.latest_revision.slots:
item = page.data_item()
"""Get fails as there is no mediainfo."""
item.get()
```
Result
```
Traceback (most recent call last):
File "/Users/kimmovirtanen/wikitech/core/tests/file_tests.py", line 400, in test_file_exist_but_without_item
item.get()
File "/Users/kimmovirtanen/wikitech/core/pywikibot/page/_wikibase.py", line 427, in get
data = self.file.latest_revision.slots['mediainfo']['*']
KeyError: 'mediainfo'
```
Fix
Handle the missing key as NoWikibaseEntityError and creating get_data_for_new_entity() if user wants to create new item for the file.
**Bug 2 (T222159) is that the empty statements is list instead of dictionary **
Code
```lang=python
gen = pagegenerators.RandomPageGenerator(total=1000, site=site, namespaces=[6]) # Namespace 6 corresponds to files
"""Seek to first pagewith mediainfo."""
for page in gen:
if 'mediainfo' in page.latest_revision.slots:
item = page.data_item()
"""Get fails in first item where is no statements in mediainfo."""
data=item.get()
```
Result
```
Traceback (most recent call last):
File "/Users/kimmovirtanen/pywikibot/latestfiles.py", line 23, in <module>
data=item.get()
File "/Users/kimmovirtanen/pywikibot/venv/lib/python3.10/site-packages/pywikibot/page/_wikibase.py", line 446, in get
return super().get(force=force)
File "/Users/kimmovirtanen/pywikibot/venv/lib/python3.10/site-packages/pywikibot/page/_wikibase.py", line 275, in get
value = cls.fromJSON(self._content.get(key, {}), self.repo)
File "/Users/kimmovirtanen/pywikibot/venv/lib/python3.10/site-packages/pywikibot/page/_collections.py", line 213, in fromJSON
for key, claims in data.items():
AttributeError: 'list' object has no attribute 'items'
CRITICAL: Exiting due to uncaught exception AttributeError: 'list' object has no attribute 'items'
```
Fix
Pywikibot fix is to convert the detect incorrect list and convert to dictionary when it is loaded.
Howto test if it is working
```
import pywikibot
site = pywikibot.Site('commons', 'commons')
page = pywikibot.FilePage(site,'Image:Montemurro1857.png')
item = page.data_item()
data=item.get()
print(data)
```