Skip to content

Commit 1c588e6

Browse files
committed
Fix updatedb.py
The type error was due to a spelling typo require instead of required And args.file has been renamed to args.dbfile in order to completely fix #8
1 parent a88e026 commit 1c588e6

File tree

1 file changed

+107
-107
lines changed

1 file changed

+107
-107
lines changed

mediacollectiondb/updatedb.py

+107-107
Original file line numberDiff line numberDiff line change
@@ -1,107 +1,107 @@
1-
"""updatedb module allows you to update a media collection database."""
2-
3-
import logging
4-
import time
5-
6-
import mwclient
7-
8-
import media
9-
10-
DEFAULT_DB_FILE = 'category.db'
11-
12-
COMMONS_SITE_URL = 'commons.wikimedia.org'
13-
COMMONS_PROTOCOL = 'https'
14-
COMMONS_DEFAULT_CATEGORY = 'Images supported by Wikimedia France - Lutz'
15-
16-
COMMONS_QI_CATEGORY = 'Category:Quality images'
17-
COMMONS_FP_CATEGORY = 'Category:Featured pictures on Wikimedia Commons'
18-
COMMONS_VI_CATEGORY = 'Category:Valued images sorted by promotion date'
19-
20-
DEFAULT_DB_FILE = 'category.db'
21-
22-
23-
def updatecategory(mediadatabase, category):
24-
"""Add media from a category to a database.
25-
26-
Args:
27-
mediadatabase (media.MediaCollection): database to save media
28-
category (str): category to update
29-
"""
30-
site = mwclient.Site((COMMONS_PROTOCOL, COMMONS_SITE_URL))
31-
images = [img for img in site.Categories[category]]
32-
logging.debug("%d images in category %s", len(images), category)
33-
for img in images:
34-
image = make_media(img)
35-
mediadatabase.save(image)
36-
37-
38-
def make_media(img):
39-
"""Create a media from an API image information.
40-
41-
Args:
42-
img (?): image information obtained from the API
43-
"""
44-
info = img.imageinfo
45-
image = media.Media(img.pageid,
46-
img.name,
47-
width=info['width'],
48-
height=info['height'],
49-
size=info['width'] * info['height'])
50-
cats = [cat for cat in img.categories()]
51-
revs = [rev for rev in img.revisions()]
52-
# upload date and uploader
53-
first_revision = revs[-1]
54-
image.uploader = first_revision['user']
55-
# qi/fp/vi
56-
for cat in cats:
57-
if cat.name == COMMONS_QI_CATEGORY:
58-
image.quality_image = True
59-
if cat.name == COMMONS_FP_CATEGORY:
60-
image.featured_picture = True
61-
if cat.name == COMMONS_VI_CATEGORY:
62-
image.valued_image = True
63-
return image
64-
65-
66-
def main():
67-
"""Main function of the updatedb module."""
68-
from argparse import ArgumentParser
69-
start_time = time.time()
70-
description = "MediaCollectionDB update script."
71-
parser = ArgumentParser(description=description)
72-
parser.add_argument("-c", "--category",
73-
type=str,
74-
dest="category",
75-
required=False,
76-
default=COMMONS_DEFAULT_CATEGORY,
77-
help="Media Category")
78-
parser.add_argument("-f", "--file",
79-
type=str,
80-
dest="file",
81-
require=False,
82-
default=DEFAULT_DB_FILE,
83-
help="Database file, default: category.db")
84-
verbosity_group = parser.add_mutually_exclusive_group()
85-
verbosity_group.add_argument("-v",
86-
action="count",
87-
dest="verbose",
88-
default=1,
89-
help="Verbosity level. -v for DEBUG")
90-
verbosity_group.add_argument("-q", "--quiet",
91-
action="store_const",
92-
dest="verbose",
93-
const=0,
94-
help="To silence the INFO messages")
95-
args = parser.parse_args()
96-
logging_map = {0: logging.WARNING,
97-
1: logging.INFO,
98-
2: logging.DEBUG}
99-
logging_level = logging_map.get(args.verbose, logging.DEBUG)
100-
logging.basicConfig(level=logging_level)
101-
logging.info("Starting")
102-
mediadatabase = media.MediaCollection(args.dbfile)
103-
updatecategory(mediadatabase, args.category)
104-
logging.info("--- Ended in %s seconds", (time.time() - start_time))
105-
106-
if __name__ == '__main__':
107-
main()
1+
"""updatedb module allows you to update a media collection database."""
2+
3+
import logging
4+
import time
5+
6+
import mwclient
7+
8+
import media
9+
10+
DEFAULT_DB_FILE = 'category.db'
11+
12+
COMMONS_SITE_URL = 'commons.wikimedia.org'
13+
COMMONS_PROTOCOL = 'https'
14+
COMMONS_DEFAULT_CATEGORY = 'Images supported by Wikimedia France - Lutz'
15+
16+
COMMONS_QI_CATEGORY = 'Category:Quality images'
17+
COMMONS_FP_CATEGORY = 'Category:Featured pictures on Wikimedia Commons'
18+
COMMONS_VI_CATEGORY = 'Category:Valued images sorted by promotion date'
19+
20+
DEFAULT_DB_FILE = 'category.db'
21+
22+
23+
def updatecategory(mediadatabase, category):
24+
"""Add media from a category to a database.
25+
26+
Args:
27+
mediadatabase (media.MediaCollection): database to save media
28+
category (str): category to update
29+
"""
30+
site = mwclient.Site((COMMONS_PROTOCOL, COMMONS_SITE_URL))
31+
images = [img for img in site.Categories[category]]
32+
logging.debug("%d images in category %s", len(images), category)
33+
for img in images:
34+
image = make_media(img)
35+
mediadatabase.save(image)
36+
37+
38+
def make_media(img):
39+
"""Create a media from an API image information.
40+
41+
Args:
42+
img (?): image information obtained from the API
43+
"""
44+
info = img.imageinfo
45+
image = media.Media(img.pageid,
46+
img.name,
47+
width=info['width'],
48+
height=info['height'],
49+
size=info['width'] * info['height'])
50+
cats = [cat for cat in img.categories()]
51+
revs = [rev for rev in img.revisions()]
52+
# upload date and uploader
53+
first_revision = revs[-1]
54+
image.uploader = first_revision['user']
55+
# qi/fp/vi
56+
for cat in cats:
57+
if cat.name == COMMONS_QI_CATEGORY:
58+
image.quality_image = True
59+
if cat.name == COMMONS_FP_CATEGORY:
60+
image.featured_picture = True
61+
if cat.name == COMMONS_VI_CATEGORY:
62+
image.valued_image = True
63+
return image
64+
65+
66+
def main():
67+
"""Main function of the updatedb module."""
68+
from argparse import ArgumentParser
69+
start_time = time.time()
70+
description = "MediaCollectionDB update script."
71+
parser = ArgumentParser(description=description)
72+
parser.add_argument("-c", "--category",
73+
type=str,
74+
dest="category",
75+
required=False,
76+
default=COMMONS_DEFAULT_CATEGORY,
77+
help="Media Category")
78+
parser.add_argument("-f", "--file",
79+
type=str,
80+
dest="dbfile",
81+
required=False,
82+
default=DEFAULT_DB_FILE,
83+
help="Database file, default: category.db")
84+
verbosity_group = parser.add_mutually_exclusive_group()
85+
verbosity_group.add_argument("-v",
86+
action="count",
87+
dest="verbose",
88+
default=1,
89+
help="Verbosity level. -v for DEBUG")
90+
verbosity_group.add_argument("-q", "--quiet",
91+
action="store_const",
92+
dest="verbose",
93+
const=0,
94+
help="To silence the INFO messages")
95+
args = parser.parse_args()
96+
logging_map = {0: logging.WARNING,
97+
1: logging.INFO,
98+
2: logging.DEBUG}
99+
logging_level = logging_map.get(args.verbose, logging.DEBUG)
100+
logging.basicConfig(level=logging_level)
101+
logging.info("Starting")
102+
mediadatabase = media.MediaCollection(args.dbfile)
103+
updatecategory(mediadatabase, args.category)
104+
logging.info("--- Ended in %s seconds", (time.time() - start_time))
105+
106+
if __name__ == '__main__':
107+
main()

0 commit comments

Comments
 (0)