kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
				
				
				
			
		
			
				
	
	
		
			43 wiersze
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			43 wiersze
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
| 
 | |
| 
 | |
| def load(model, *args, **kwargs):
 | |
|     importer = registry[model.__name__](model=model)
 | |
|     return importer.load(*args, **kwargs)
 | |
| 
 | |
| class Importer(object):
 | |
|     def __init__(self, model):
 | |
|         self.model = model
 | |
| 
 | |
|     def load(self, cleaned_data, raw_data, import_hooks):
 | |
|         mbid = cleaned_data.pop('mbid')
 | |
|         m = self.model.objects.update_or_create(mbid=mbid, defaults=cleaned_data)[0]
 | |
|         for hook in import_hooks:
 | |
|             hook(m, cleaned_data, raw_data)
 | |
|         return m
 | |
| 
 | |
| class Mapping(object):
 | |
|     """Cast musicbrainz data to funkwhale data and vice-versa"""
 | |
|     def __init__(self, musicbrainz_mapping):
 | |
|         self.musicbrainz_mapping = musicbrainz_mapping
 | |
| 
 | |
|         self._from_musicbrainz = {}
 | |
|         self._to_musicbrainz = {}
 | |
|         for field_name, conf in self.musicbrainz_mapping.items():
 | |
|             self._from_musicbrainz[conf['musicbrainz_field_name']] = {
 | |
|                 'field_name': field_name,
 | |
|                 'converter': conf.get('converter', lambda v: v)
 | |
|             }
 | |
|             self._to_musicbrainz[field_name] = {
 | |
|                 'field_name': conf['musicbrainz_field_name'],
 | |
|                 'converter': conf.get('converter', lambda v: v)
 | |
|             }
 | |
|     def from_musicbrainz(self, key, value):
 | |
|         return self._from_musicbrainz[key]['field_name'], self._from_musicbrainz[key]['converter'](value)
 | |
| 
 | |
| registry = {
 | |
|     'Artist': Importer,
 | |
|     'Track': Importer,
 | |
|     'Album': Importer,
 | |
|     'Work': Importer,
 | |
| }
 |