def handle(self, *args, **options): quiet = options.get('quiet', False) if not quiet: self.stdout.write("Export of DMS MDT's command called.\n") # Try and Fetch all mdts manager = MetaDataTemplateManager() mdts = manager.get_all_mdts() # Validating all OK if not mdts: if not quiet: self.stderr.write('DMS has no MDT-s.') return for mdt_link in mdts.itervalues(): filename = mdt_link['mdt_id'] mdt_instance = manager.get_mdts_by_name([filename, ]) filename += '.json' file_obj = open(os.path.join(filename), 'w+') file_obj.seek(0) mdt_obj = mdt_instance['1'] try: del mdt_obj["doc_type"] except KeyError: pass mdt_jsoned = json.dumps(mdt_obj, sort_keys=True, indent=4) file_obj.write(mdt_jsoned) if not quiet: self.stderr.write('Exported to file: %s\n'% filename) if not quiet: self.stdout.write("Exporting %s MDT's" % str(len(mdts))) self.stdout.write('\n')
def make_mdt_select_form(user=None, required=True): """ Special method to construct custom MDTSearchSelectForm suggests MDT's for search that only restricted by user Docrule permissions. E.g.: 'MDT1' is shown in MDTSearchSelectForm only if: 'MDT1' has connected 'docrule1' AND 'user', that is provided to method, has permission to interact with this DocumentTypeRule ('docrule1' in our case). """ # Fetching all mdts that have more than 1 docrule mdt_m = MetaDataTemplateManager() all_mdts = {} try: couch_mdts = mdt_m.get_all_mdts() # Filtering with more than 1 docrule count if couch_mdts: for mdt_id, mdt in couch_mdts.iteritems(): mdt_docrules = mdt['docrule_id'] if mdt_docrules.__len__() > 1: all_mdts[mdt_id] = mdt except RequestError: # No CouchDB pass filtered_mdts = {} # Filtering MDT's displaying only permitted ones for provided user if not user.is_superuser and all_mdts: allowed_docrules_pks = list_permitted_docrules_pks(user) # Filtering all_mdts by only allowed ones for mdt in all_mdts: mdt_docrules = all_mdts[mdt]['docrule_id'] for docrule_id in mdt_docrules: if docrule_id in allowed_docrules_pks: filtered_mdts[mdt] = all_mdts[mdt] # listing mdts to display in form by number, mdt_id if filtered_mdts: mdt_choices = [(mdt, all_mdts[mdt]['mdt_id']) for mdt in filtered_mdts.iterkeys()] else: mdts_list = [mdt for mdt in all_mdts.iterkeys()] mdt_choices = [(mdt, all_mdts[mdt]['mdt_id']) for mdt in mdts_list] mdt_choices.sort() # Constructing form class MDTSelectForm(forms.Form): mdt = forms.ChoiceField(choices=mdt_choices, label=SEARCH_STRING_REPR['MDT_SEARCH'], required=required) return MDTSelectForm