示例#1
0
文件: views.py 项目: pgwthf/TSB
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})
示例#2
0
文件: views.py 项目: pgwthf/TSB
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
示例#3
0
文件: views.py 项目: pgwthf/TSB
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,

            })
示例#4
0
 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'))