def sync_to(self, sync_cls): objs = [] # traverse the dir for dirpath, folders, files in os.walk(self.folder): for fname in files: fpath = os.path.join(dirpath, fname) # get album, if have rel = os.path.relpath(dirpath, self.folder) if rel != '.': # has sub dir try: album = Album.get(name=rel) except Album.DoesNotExist: album = Album.create(name=rel, folder=rel) else: album = None # TODO: should a file extension filter here? md5 = hashlib.md5(open(fpath).read()).hexdigest() try: # if file has been exists before local = Local.get(md5=md5) opath = local.path.encode('utf8') if opath != fpath: logging.debug('%s path change: %s --> %s' % (local, local.path, fpath)) # file was moved, rename filename or folder local.title, ext = os.path.splitext(fname) local.album = album #local.fpath = fpath local.last_modified = datetime.datetime.now() local.save() objs.append(local) # objs: path modified. except Local.DoesNotExist: # new file try: # file content modified local = Local.get(path=fpath) logging.debug('%s modified, path: %s' % (local, fpath)) except Local.DoesNotExist: # brand new file logging.debug('new file %s' % fpath) local = Local() local.title, ext = os.path.splitext(fname) local.album = album local.path = fpath local.md5 = md5 local.last_modified = datetime.datetime.now() local.save() objs.append(local) # for those have not been upload for l in Local.select(): sets = getattr(l, sync_cls.model.local.related_name) if sets.count() == 0 and l not in objs: objs.append(l) # pass objs that needs update to sync class logging.info('local: sync to %s, count %d' % (sync_cls, len(objs))) sync_cls.sync_from_local(objs)
def addReleases(artist_id, update_artist = True): artist_record = Artist.get(id=artist_id) musicbrainz_artist = musicbrainz.getBestArtistMatch(artist_record.name) release_ids = [] for release in musicbrainz_artist.getReleases(): release_ids.append(utils.extractUuid(release.id)) # These release results do not contain all the information, we must re-query for that info... for rid in release_ids: release = musicbrainz.getRelease(rid) if not release: continue release_group_id = utils.extractUuid(release.getReleaseGroup().id) try: release_group_tracked = Album.get(release_group_id=release_group_id) except peewee.DoesNotExist: release_group_tracked = None if release_group_tracked: continue release_record = Album.create( musicbrainz_id = rid, asin = release.getAsin(), release_group_id = release_group_id, artist_id = artist_id, name = release.getTitle(), type = release.getType(), released_on = release.getEarliestReleaseDate(), state = 'wanted') track_number = 1 for track in release.getTracks(): Track.create( album_id = release_record.id, number = track_number, title = track.getTitle(), length = track.getDuration(), state = 'wanted') track_number += 1 # Rescan the Music Library after adding new releases to see if the user has # them or not. Will not run if explicitly told not to by the caller. if(update_artist): ThreadPool.put(updateArtist, {'artist_id': artist_id})
def create_one_album(self, album_title = 'Album'): pictures = Picture.objects.all() album = Album.create(album_title, 'First Page', self.pick_a_random_profile()) page_count = random.randrange(5,101) # 5 <= page_count <= 100 for i in xrange(1, page_count): text = 'Page ' + i.__str__() page = Page.create(text) picture_count = random.randrange(1,5) # 1 <= picture_count <= 4 for j in xrange(1, picture_count): # pick a random picture from database and add it to a page random_index = random.randrange(0, pictures.count()) random_picture = pictures[random_index] page.add_picture(random_picture, j.__str__()) # Page ready to be added to album album.add_page(page) return self