def show_bookmarks(request, bookmark_id): if request.method == 'POST': system_list = request.POST.getlist('id') if request.POST.get('todo') == 'Drop bookmark': for sys in System.objects.filter(id__in=system_list): sys.bookmark = None sys.save() view_settings = { 'parameters': False, 'performance': True, 'result': True} bookmark = Bookmark.objects.get(id=bookmark_id) systems = System.objects.filter(bookmark=bookmark) systems_table = MakeSystemsTable(data=systems, order_by=('-id',), show=view_settings, excludes=['params', 'bookmark']) # generate column_titles if systems.count(): systems_table.base_columns['params'].verbose_name = mark_safe( '</th><th>'.join(str2dict_keys(systems[0].params))) for key, params in OUTPUT_FORMATS.items(): if 'title' in params: systems_table.base_columns[key].verbose_name = params['title'] RequestConfig(request, paginate={'per_page': 100}).configure(systems_table) return render(request, 'show_bookmarks.html', {'systems_table': systems_table, 'bookmark': bookmark})
def export_systems_to_csv(request, metasystem_id): ''' View that returns csv files with all trades for this system/result. ''' response = HttpResponse(mimetype='text/csv') response['Content-Disposition'] = 'attachment;filename="results_{}.csv"'.\ format(metasystem_id) results = System.objects.filter(metasystem=metasystem_id).values() column_list = [k for k in OUTPUT_FORMATS] column_list.extend(str2dict_keys(results[0]['params'])) writer = csv.DictWriter(response, column_list, extrasaction='ignore') writer.writeheader() for result in results: result.update(str2dict(result['params'])) writer.writerow(result) return response
def show_metasystem(request, metasystem_id): ''' Show MetaSystem with <metasystem_id> along with it ''' notify = None if request.method == 'POST' and request.POST.get('action'): system_list = request.POST.getlist('id') if request.POST.get('action') == 'Delete': if not len(system_list): notify = Notify('Delete failed, select System(s) to delete') else: notify = Notify('Delete System(s) {}?'.format(', '.join( system_list))) notify.set_replies(request, ('Yes', 'No')) request.session['system_delete_list'] = system_list elif request.method == 'POST' and request.POST.get('reply'): system_list = request.session.get('system_delete_list') if not system_list: raise AttributeError('session has no valid system_delete_list') del request.session['system_delete_list'] if request.POST.get('reply') == 'Yes': for system_id in system_list: system = System.objects.get(id=system_id) system.delete() notify = Notify('System(s) {} deleted'.format(','.join( system_list))) elif request.POST.get('reply') == 'No': notify = Notify('Delete cancelled') metasystem = MetaSystem.objects.get(id=metasystem_id) if request.method == 'POST' and request.POST.get('action'): if request.POST.get('action') == 'Start calculations': errors = metasystem.set_active() if errors: notify = Notify('MetaSystem NOT started: {}'.format(', '.join( errors))) else: notify = Notify('MetaSystem {} started'.format(metasystem.name)) elif request.POST.get('action') == 'Stop calculations': metasystem.set_inactive() notify = Notify('MetaSystem {} stopped'.format(metasystem.name)) values = metasystem.get_system_summary(('reliability', 'profit_factor', 'exp_p_day', 'profit_pa', 'ann_profit', 'min_year', 'min_dd_ratio', 'sqn')) if values: performance = [] for key, fmt in OUTPUT_FORMATS.items(): # to maintain order value = values.get(key, None) if value is not None: performance.append((fmt['name'], fmt['format'].format(value))) else: performance = None metasystem.build_structure() # copy system to method if required if request.method == 'POST' and request.POST.get('copy'): copyform = CopyForm(data=request.POST) if copyform.is_valid(): new_ms_id = copyform.cleaned_data['metasystem'] reverse = copyform.cleaned_data['reverse'] for method in metasystem.method_set.all(): method.copy(new_ms_id, reverse=reverse, comment='copy from metasystem {}'.format(metasystem.id)) notify = Notify('{} methods copied to metasystem {}'.format( metasystem.method_set.count(), metasystem.id)) else: copyform = CopyForm() systems = System.objects.filter(metasystem__id=metasystem_id) view_settings = { 'parameters': True, 'performance': True, 'result': True } systems_table = MakeSystemsTable(data=systems, order_by=('-id',), show=view_settings, excludes=['metasystem']) # generate column_titles if systems.count(): systems_table.base_columns['params'].verbose_name = mark_safe( '</th><th>'.join(str2dict_keys(systems[0].params))) for key, params in OUTPUT_FORMATS.items(): if 'title' in params: systems_table.base_columns[key].verbose_name = params['title'] RequestConfig(request, paginate={'per_page': 100}).configure(systems_table) return render(request, 'show_metasystem.html', { 'metasystem': metasystem, 'copyform': copyform, 'notify': notify, 'performance': performance, 'systems_table': systems_table, # 'filterformset': filterformset, # 'bookmarkform': bookmarkform, })
def test_get_dict_keys_values(self): dict_string = '{"a":1, 2:"3", -1: 0}' self.assertEqual(su.str2dict_values(dict_string), [0, '3', 1]) self.assertIsNone(su.str2dict_values('asdf')) self.assertEqual(su.str2dict_keys(dict_string), [-1, 2, 'a']) self.assertIsNone(su.str2dict_keys('asdf'))