@@ -61,8 +61,13 @@ def confirm_finalization(self, fields):
6161 fields or self .default_fields )
6262
6363 def subcategory (self ):
64- files = []
65- for root , _ , fs in os .walk (self ['path' ]):
64+ path = self ['path' ]
65+ if os .path .isfile (path ):
66+ files = [(os .path .getsize (path ), path )]
67+ else :
68+ files = []
69+
70+ for root , _ , fs in os .walk (path ):
6671 for f in fs :
6772 fpath = os .path .join (root , f )
6873 files .append ((os .path .getsize (fpath ), fpath ))
@@ -863,35 +868,15 @@ def _render_form_description(self):
863868
864869
865870class AudioSubmission (BbSubmission ):
866- default_fields = ("description" , "form_tags" , "year" , "cover" , "artist" ,
867- "title" , "format" , "bitrate" , "media" )
871+ default_fields = ("description" , "form_tags" , "year" , "cover" ,
872+ "title" , "format" , "bitrate" )
868873
869874 def subcategory (self ):
870- return MusicSubmission
871-
872-
873- class MusicSubmission (AudioSubmission ):
874- default_fields = (AudioSubmission .default_fields + (
875- 'remaster' , 'remaster_year' , 'remaster_title' ))
876- _form_type = 'Music'
877-
878- @form_field ('remaster_true' , 'checkbox' )
879- def _render_remaster (self ):
880- # todo user input function/module to reduce boilerplating
881- return bool (
882- input ('Is this a special/remastered edition? [y/N] ' ).lower ()
883- == 'y' )
884-
885- @form_field ('remaster_year' )
886- def _render_remaster_year (self ):
887- if self ['remaster' ]:
888- return input ('Please enter the remaster year: ' )
875+ release , rg = self ['release' ]
889876
890- @form_field ('remaster_title' )
891- def _render_remaster_title (self ):
892- if self ['remaster' ]:
893- return (input ('Please enter the remaster title (optional): ' )
894- or None )
877+ if 'Audiobook' in rg ['secondary-type-list' ]:
878+ return AudiobookSubmission
879+ return MusicSubmission
895880
896881 @form_field ('format' )
897882 def _render_format (self ):
@@ -944,23 +929,6 @@ def _render_bitrate(self):
944929 log .debug ("format:{}\n tags:{}" , format , tags )
945930 raise RuntimeError ('Unrecognized format/bitrate' )
946931
947- @form_field ('media' )
948- def _render_media (self ):
949- # choices = ['CD', 'DVD', 'Vinyl', 'Soundboard', 'DAT', 'Web']
950-
951- media = self ['summary' ]['media' ]
952- if len (media ) > 1 :
953- log .debug (media )
954- media = media [0 ]
955-
956- if media == 'CD' :
957- return media
958- elif media == 'Digital Media' :
959- return 'Web'
960- elif "vinyl" in media .lower ():
961- return 'Vinyl'
962-
963- raise NotImplementedError (media )
964932
965933 def _render_mediainfo_path (self ):
966934 assert os .path .isdir (self ['path' ])
@@ -1023,7 +991,6 @@ def _render_tags(self):
1023991
1024992 def _render_release (self ):
1025993 tags = self ['tags' ]
1026- # print(tags)
1027994 if tags ['rid' ]:
1028995 log .info ('Found MusicBrainz release in tags' )
1029996 release = mb .musicbrainzngs .get_release_by_id (
@@ -1047,8 +1014,8 @@ def _render_release(self):
10471014 # identify self:
10481015 # - num tracks todo
10491016 # - scan for mb tags
1050- print ( 'rg ' , rg )
1051- print ( 'r ' , release )
1017+ log . debug ( 'release-group {} ' , rg )
1018+ log . debug ( 'release ' , release )
10521019
10531020 # todo: assert release group matches!
10541021 # e.g.: assert # of tracks equal
@@ -1078,37 +1045,12 @@ def _render_cover(self):
10781045 return cover
10791046
10801047 def _finalize_cover (self ):
1081- return imagehosting .upload_files (self ['cover' ])
1048+ return imagehosting .upload (self ['cover' ])
10821049
10831050 @form_field ('year' )
10841051 def _render_year (self ):
10851052 return self ['summary' ]['year' ]
10861053
1087- @form_field ('tags' )
1088- def _render_form_tags (self ):
1089- _defaults = {
1090- 'acoustic' , 'alternative' , 'ambient' , 'blues' , 'classic.rock' ,
1091- 'classical' , 'country' , 'dance' , 'dubstep' , 'electronic' ,
1092- 'experimental' , 'folk' , 'funk' , 'hardcore' , 'heavy.metal' ,
1093- 'hip.hop' , 'indie' , 'indie.pop' , 'instrumental' , 'jazz' , 'metal' ,
1094- 'pop' , 'post.hardcore' , 'post.rock' , 'progressive.rock' ,
1095- 'psychedelic' , 'punk' , 'reggae' , 'rock' , 'soul' , 'trance' ,
1096- 'trip.hop' }
1097- tags = self ['summary' ]['tags' ]
1098- if not tags :
1099- tags = input ("No tags found. Please enter tags "
1100- "(comma-separated): " ).split (',' )
1101- tags = set (format_tag (tag ) for tag in tags )
1102- while True :
1103- try :
1104- assert tags & _defaults != set ()
1105- except AssertionError :
1106- print ("Default tags:\n " + ", " .join (sorted (_defaults )))
1107- print ("Submission must contain at least one default tag." )
1108- tags = rlinput ("Enter tags: " , "," .join (tags )).split (',' )
1109- tags = set (format_tag (tag ) for tag in tags )
1110- else :
1111- return "," .join (tags )
11121054
11131055 def _render_links (self ):
11141056 release , rg = self ['release' ]
@@ -1188,14 +1130,100 @@ def _render_release_desc(self):
11881130
11891131 return description
11901132
1133+ @form_field ('scene' , 'checkbox' )
1134+ def _render_scene (self ):
1135+ return False
1136+
1137+ def _get_tags (self , required_tags ):
1138+ tags = self ['summary' ]['tags' ]
1139+ if not tags :
1140+ tags = input ("No tags found. Please enter tags "
1141+ "(comma-separated): " ).split (',' )
1142+ tags = set (format_tag (tag ) for tag in tags )
1143+ tags -= {'audiobook' }
1144+ while True :
1145+ try :
1146+ assert tags & required_tags != set ()
1147+ except AssertionError :
1148+ print ("Default tags:\n " + ", " .join (sorted (required_tags )))
1149+ print ("Submission must contain at least one default tag." )
1150+ tags = rlinput ("Enter tags: " , "," .join (tags )).split (',' )
1151+ tags = set (format_tag (tag ) for tag in tags )
1152+ else :
1153+ return "," .join (tags )
1154+
1155+
1156+ class AudiobookSubmission (AudioSubmission ):
1157+ _form_type = 'Audiobooks'
1158+
1159+ @form_field ('tags' )
1160+ def _render_form_tags (self ):
1161+ _defaults = {'fiction' , 'non.fiction' }
1162+ return self ._get_tags (_defaults )
1163+
1164+ @form_field ('title' )
1165+ def _render_title (self ):
1166+ return "{} - {}" .format (
1167+ self ['summary' ]['artist' ], self ['summary' ]['title' ])
1168+
1169+
1170+ class MusicSubmission (AudioSubmission ):
1171+ default_fields = (AudioSubmission .default_fields + (
1172+ 'artist' , 'remaster' , 'remaster_year' , 'remaster_title' , 'media' ,))
1173+ _form_type = 'Music'
1174+
1175+ @form_field ('remaster_true' , 'checkbox' )
1176+ def _render_remaster (self ):
1177+ # todo user input function/module to reduce boilerplating
1178+ return bool (
1179+ input ('Is this a special/remastered edition? [y/N] ' ).lower ()
1180+ == 'y' )
1181+
1182+ @form_field ('remaster_year' )
1183+ def _render_remaster_year (self ):
1184+ if self ['remaster' ]:
1185+ return input ('Please enter the remaster year: ' )
1186+
1187+ @form_field ('remaster_title' )
1188+ def _render_remaster_title (self ):
1189+ if self ['remaster' ]:
1190+ return (input ('Please enter the remaster title (optional): ' )
1191+ or None )
1192+
1193+ @form_field ('media' )
1194+ def _render_media (self ):
1195+ # choices = ['CD', 'DVD', 'Vinyl', 'Soundboard', 'DAT', 'Web']
1196+
1197+ media = self ['summary' ]['media' ]
1198+ if len (media ) > 1 :
1199+ log .debug (media )
1200+ media = media [0 ]
1201+
1202+ if media == 'CD' :
1203+ return media
1204+ elif media == 'Digital Media' :
1205+ return 'Web'
1206+ elif "vinyl" in media .lower ():
1207+ return 'Vinyl'
1208+
1209+ raise NotImplementedError (media )
1210+
1211+ @form_field ('tags' )
1212+ def _render_form_tags (self ):
1213+ _defaults = {
1214+ 'acoustic' , 'alternative' , 'ambient' , 'blues' , 'classic.rock' ,
1215+ 'classical' , 'country' , 'dance' , 'dubstep' , 'electronic' ,
1216+ 'experimental' , 'folk' , 'funk' , 'hardcore' , 'heavy.metal' ,
1217+ 'hip.hop' , 'indie' , 'indie.pop' , 'instrumental' , 'jazz' , 'metal' ,
1218+ 'pop' , 'post.hardcore' , 'post.rock' , 'progressive.rock' ,
1219+ 'psychedelic' , 'punk' , 'reggae' , 'rock' , 'soul' , 'trance' ,
1220+ 'trip.hop' }
1221+ return self ._get_tags (_defaults )
1222+
11911223 @form_field ('artist' )
11921224 def _render_artist (self ):
11931225 return self ['summary' ]['artist' ]
11941226
11951227 @form_field ('title' )
11961228 def _render_title (self ):
11971229 return self ['summary' ]['title' ]
1198-
1199- @form_field ('scene' , 'checkbox' )
1200- def _render_scene (self ):
1201- return False
0 commit comments