Example #1
0
 def handle(self, *args, **options):
     from jflow.conf import settings
     level = {
         '0': logging.WARN, 
         '1': logging.INFO, 
         '2': logging.DEBUG
     }[options.get('verbosity', '1')]
     logging.basicConfig(level=level, format="%(name)s: %(levelname)s: %(message)s")
     logger = logging.getLogger('addccy')
     
     dv = options.get('defaultvendor', None)
     if dv:
         dv = unicode(dv[0])        
     ccys = currencydb()
     for c in ccys.values():
         id,created = DataId.objects.get_or_create(code = c.code,
                                                   country = c.default_country,
                                                   default_vendor = dv,
                                                   name = '%s Spot Rate' % c.as_cross('/'),
                                                   tags = 'forex currency spot index')
         id.add_vendor('blb','%s Curncy' % c.code)
         id.add_vendor('ecb',c.code)
         
         if created:
             logger.info("Created currency %s" % id)
         else:
             logger.info("Modified currency %s" % id)
Example #2
0
    def handle(self, *args, **options):
        from jflow.conf import settings
        level = {
            '0': logging.WARN,
            '1': logging.INFO,
            '2': logging.DEBUG
        }[options.get('verbosity', '1')]
        logging.basicConfig(level=level,
                            format="%(name)s: %(levelname)s: %(message)s")
        logger = logging.getLogger('addccy')

        dv = options.get('defaultvendor', None)
        if dv:
            dv = unicode(dv[0])
        ccys = currencydb()
        for c in ccys.values():
            id, created = DataId.objects.get_or_create(
                code=c.code,
                country=c.default_country,
                default_vendor=dv,
                name='%s Spot Rate' % c.as_cross('/'),
                tags='forex currency spot index')
            id.add_vendor('blb', '%s Curncy' % c.code)
            id.add_vendor('ecb', c.code)

            if created:
                logger.info("Created currency %s" % id)
            else:
                logger.info("Modified currency %s" % id)
Example #3
0
 def test_dump_currency_table(self):
     db = currencydb()
     table = list(ccy.dump_currency_table())
     self.assertEqual(len(table), len(db)+1)
Example #4
0
 def test2letters(self):
     ccys = currencydb()
     twol = {}
     for ccy in ccys.values():
         self.assertFalse(ccy.twoletterscode in twol)
         twol[ccy.twoletterscode] = ccy
Example #5
0
 def testiso(self):
     ccys = currencydb()
     iso = {}
     for ccy in ccys.values():
         self.assertFalse(ccy.isonumber in iso)
         iso[ccy.isonumber] = ccy
Example #6
0
 def testdefaultcountry(self):
     ccys = currencydb()
     for ccy in ccys.values():
         if ccy.code != 'XBT':
             self.assertEqual(ccy.code[:2], ccy.default_country)
Example #7
0
def events(request, event_id=None):
    # Redirect to proper URL if there's a ?goto=... present
    if 'goto' in request.GET:
        return redirect('/results/events/' + request.GET['goto'])

    base = base_ctx('Results', 'By Event', request)
    base.update(csrf(request))
    
    try:
        event = Event.objects.get(id=int(event_id))
    except:
        # This is executed for invalid event IDs or the root table
        ind_bigs = collect(Event.objects.filter(parent__isnull=True, big=True, category='individual').\
                select_related('event').order_by('lft'), 2)
        ind_smalls = Event.objects.filter(parent__isnull=True, big=False, category='individual').\
                select_related('event').order_by('name')

        team_bigs = collect(Event.objects.filter(parent__isnull=True, big=True, category='team').\
                select_related('event').order_by('lft'), 2)
        team_smalls = Event.objects.filter(parent__isnull=True, big=False, category='team').\
                select_related('event').order_by('name')

        freq_bigs = collect(Event.objects.filter(parent__isnull=True, big=True, category='frequent').\
                select_related('event').order_by('lft'), 2)
        freq_smalls = Event.objects.filter(parent__isnull=True, big=False, category='frequent').\
                select_related('event').order_by('name')

        base.update({'ind_bigs': ind_bigs,   'ind_smalls': ind_smalls,\
                     'team_bigs': team_bigs, 'team_smalls': team_smalls,\
                     'freq_bigs': freq_bigs, 'freq_smalls': freq_smalls})
        return render_to_response('events.html', base)

    # Number of matches (set event to big if too large)
    matches = Match.objects.filter(eventobj__lft__gte=event.lft, eventobj__rgt__lte=event.rgt)
    if matches.count() > 200 and not event.big:
        event.big = True
        event.save()
        
    # Get parent, ancestors and siblings
    if event.parent != None:
        siblings = event.parent.event_set.exclude(id=event.id).order_by('lft')
    else:
        siblings = None

    # Make modifications if neccessary
    if base['adm'] == True:
        if 'op' in request.POST and request.POST['op'] == 'Modify':
            if request.POST['type'] != 'nochange':
                event.change_type(request.POST['type'])
                if 'siblings' in request.POST.keys() and siblings is not None:
                    for sibling in siblings:
                        sibling.change_type(request.POST['type'])
                        
            if request.POST['name'] != '' and request.POST['name'] != event.name:
                event.name = request.POST['name']
                event.update_name()
                event.save()
                for e in event.get_children():
                    e.update_name()

            if request.POST['date'].strip() != 'No change':
                matches.update(date=request.POST['date'])
                base['message'] = 'Modified all matches.'

            if request.POST['offline'] != 'nochange':
                matches.update(offline=(request.POST['offline'] == 'offline'))
                base['message'] = 'Modified all matches.'

            if request.POST['game'] != 'nochange':
                matches.update(game=request.POST['game'])
                base['message'] = 'Modified all matches.'

            if request.POST['homepage'] != event.get_homepage():
                event.set_homepage(request.POST['homepage'])

            if request.POST['tlpd_in_id'] != event.get_tlpd_in_id():
                event.set_tlpd_in_id(request.POST['tlpd_in_id'])

            if request.POST['tlpd_kr_id'] != event.get_tlpd_kr_id():
                event.set_tlpd_kr_id(request.POST['tlpd_kr_id'])

            if request.POST['tl_thread'] != event.get_tl_thread():
                event.set_tl_thread(request.POST['tl_thread'])

            if request.POST['lp_name'] != event.get_lp_name():
                event.set_lp_name(request.POST['lp_name'])
                        
        elif 'add' in request.POST and request.POST['add'] == 'Add':
            parent = event
            for q in request.POST['subevent'].strip().split(','):
                type = request.POST['type']
                parent.add_child(q.strip(), type, 'noprint' in request.POST, 'closed' in request.POST)
                
        elif 'move' in request.POST and request.POST['move'] == 'Move':
            eventid = request.POST['moveevent']
            newparent = Event.objects.get(id=eventid)

            if event.lft > newparent.rgt:
                diff = newparent.rgt - event.lft
            else:
                diff = newparent.rgt - event.rgt - 1
            event_shift(event, diff)

            event.set_parent(newparent)
            event.update_name()

            for e in event.get_children():
                e.update_name()

        elif 'earnings' in request.POST and request.POST['earnings'] == 'Add':
            amount = int(request.POST['amount'])
            currency = request.POST['currency']
            
            players = []
            amounts = []
            placements = []
            
            for i in range(0, amount):
                player = request.POST['player-' + str(i)]
                player = Player.objects.get(id=player)
                
                amount = request.POST['amount-' + str(i)]
                amount = amount.replace(',', '').replace('.', '').replace(' ', '')
                
                players.append(player)
                amounts.append(amount)
                placements.append(i)
            
            success = Earnings.set_earnings(event, players, amounts, currency, placements)
            if success:
                base['message'] = 'Updated tournament prizepool.'
            else:
                base['message'] = 'There was an error updating the tournament prizepool.'

    base['event'] = event
    base['path'] = Event.objects.filter(lft__lte=event.lft, rgt__gte=event.rgt).order_by('lft')
    base['children'] = Event.objects.filter(parent=event).order_by('lft')
    if event.parent != None:
        base['siblings'] = event.parent.event_set.exclude(id=event.id).order_by('lft')

    # Used for moving events
    base['surroundingevents'] = event.get_parent(1).get_children().exclude(lft__gte=event.lft, rgt__lte=event.rgt)

    # Determine WoL/HotS and Online/Offline and event type
    if matches.values("game").distinct().count() == 1:
        base['game'] = matches[0].game
        if base['game'] == 'WoL':
            base['game'] = 'Wings of Liberty'
        elif base['game'] == 'HotS':
            base['game'] = 'Heart of the Swarm'
        #elif base['game'] = 'LotV':
            #base['game'] = 'Legacy of the Void'
    
    # Get list of players and earnings for prizepools
    base['players'] = Player.objects.filter(Q(id__in=matches.values('pla')) | Q(id__in=matches.values('plb')))
    
    earnings = Earnings.objects.filter(event=event).order_by('placement')
    base['earnings'] = earnings
    
    base['prizepool'] = earnings.aggregate(Sum('earnings'))['earnings__sum']
    base['prizepoolorig'] = earnings.aggregate(Sum('origearnings'))['origearnings__sum']
    
    try:
        base['prizepoolcur'] = earnings.values('currency')[0]['currency']
    except:
        base['prizepoolcur'] = "USD"
    
    # Get list of currencies
    currencies = []
    sortedcurrencies = sorted(ccy.currencydb(), key=operator.itemgetter(0))

    for currency in sortedcurrencies:
        dict = {}
        dict["name"] = ccy.currency(currency).name
        dict["code"] = ccy.currency(currency).code
        currencies.append(dict)
    base['currencies'] = currencies
    
    base['offline'] = None
    if matches.values("offline").distinct().count() == 1:
        base['offline'] = matches[0].offline

    # Statistics
    base['nmatches'] = matches.count()
    if base['nmatches'] > 0:
        qset = matches.aggregate(Sum('sca'), Sum('scb'))
        base['ngames'] = qset['sca__sum'] + qset['scb__sum']
    else:
        base['ngames'] = 0

    # Matchup wins and losses
    nti = lambda x: 0 if x is None else x
    qseta = matches.filter(rca='P', rcb='T').aggregate(Sum('sca'), Sum('scb'))
    qsetb = matches.filter(rcb='P', rca='T').aggregate(Sum('sca'), Sum('scb'))
    base['pvt_wins'] = nti(qseta['sca__sum']) + nti(qsetb['scb__sum'])
    base['pvt_loss'] = nti(qsetb['sca__sum']) + nti(qseta['scb__sum'])

    qseta = matches.filter(rca='P', rcb='Z').aggregate(Sum('sca'), Sum('scb'))
    qsetb = matches.filter(rcb='P', rca='Z').aggregate(Sum('sca'), Sum('scb'))
    base['pvz_wins'] = nti(qseta['sca__sum']) + nti(qsetb['scb__sum'])
    base['pvz_loss'] = nti(qsetb['sca__sum']) + nti(qseta['scb__sum'])

    qseta = matches.filter(rca='T', rcb='Z').aggregate(Sum('sca'), Sum('scb'))
    qsetb = matches.filter(rcb='T', rca='Z').aggregate(Sum('sca'), Sum('scb'))
    base['tvz_wins'] = nti(qseta['sca__sum']) + nti(qsetb['scb__sum'])
    base['tvz_loss'] = nti(qsetb['sca__sum']) + nti(qseta['scb__sum'])

    # Dates
    base['earliest'] = event.get_earliest()
    base['latest'] = event.get_latest()

    matches = matches.order_by('-date', '-eventobj__lft', '-id')[0:200]
    base['matches'] = display_matches(matches)

    return render_to_response('eventres.html', base)
Example #8
0
class PrizepoolModForm(forms.Form):
    sorted_curs = sorted(ccy.currencydb(), key=operator.itemgetter(0))
    currencies = [(ccy.currency(c).code, ccy.currency(c).name)
                  for c in sorted_curs]
    currency = forms.ChoiceField(choices=currencies,
                                 required=True,
                                 label=_('Currency'))
    ranked = forms.CharField(required=False,
                             max_length=10000,
                             label=_('Ranked'))
    unranked = forms.CharField(required=False,
                               max_length=10000,
                               label=_('Unranked'))

    # {{{ Constructor
    def __init__(self, request=None, event=None):
        if request is not None:
            super(PrizepoolModForm, self).__init__(request.POST)
        else:
            initial = {
                'ranked':
                earnings_code(
                    event.earnings_set.filter(
                        placement__gt=0).order_by('-earnings')),
                'unranked':
                earnings_code(
                    event.earnings_set.filter(
                        placement=0).order_by('-earnings')),
            }

            try:
                initial['currency'] = event.earnings_set.all().first().currency
            except:
                initial['currency'] = 'USD'

            super(PrizepoolModForm, self).__init__(initial=initial)

        self.label_suffix = ''

    # }}}

    # {{{ Function for parsing a single line
    def line_to_data(self, line):
        ind = line.find(' ')
        prize = Decimal(line[:ind])

        queryset = find_player(query=line[ind + 1:])
        if not queryset.exists():
            raise Exception(_("No such player: '%s'.") % line[ind + 1:])
        elif queryset.count() > 1:
            raise Exception(_("Ambiguous player: '%s'.") % line[ind + 1:])
        else:
            return prize, queryset.first()

    # }}}

    # {{{ update_event: Pushes changes to event object
    def update_event(self, event):
        ret = []

        if not self.is_valid():
            ret.append(
                Message(_('Entered data was invalid, no changes made.'),
                        type=Message.ERROR))
            for field, errors in self.errors.items():
                for error in errors:
                    ret.append(
                        Message(error=error, field=self.fields[field].label))
            return ret

        # {{{ Gather data
        ranked, unranked, ok = [], [], True

        for line in self.cleaned_data['ranked'].split('\n'):
            if line.strip() == '':
                continue
            try:
                prize, player = self.line_to_data(line)
                ranked.append({
                    'prize': prize,
                    'player': player,
                    'placement': 0
                })
            except Exception as e:
                ret.append(Message(str(e), type=Message.ERROR))
                ok = False

        for line in self.cleaned_data['unranked'].split('\n'):
            if line.strip() == '':
                continue
            try:
                prize, player = self.line_to_data(line)
                unranked.append({
                    'prize': prize,
                    'player': player,
                    'placement': -1
                })
            except Exception as e:
                ret.append(Message(str(e), type=Message.ERROR))
                ok = False

        if not ok:
            ret.append(
                Message(_('Errors occured, no changes made.'),
                        type=Message.ERROR))
            return ret
        # }}}

        # {{{ Fix placements of ranked prizes
        ranked.sort(key=lambda a: a['placement'])
        for i, e in enumerate(ranked):
            ranked[i]['placement'] = i
        # }}}

        # {{{ Commit
        try:
            Earnings.set_earnings(event, ranked, self.cleaned_data['currency'],
                                  True)
            Earnings.set_earnings(event, unranked,
                                  self.cleaned_data['currency'], False)
        except RateNotFoundError as e:
            ret.append(Message(str(e), type=Message.ERROR))
            return ret
        # }}}

        # Translators: New prizepools added to the database.
        ret.append(Message(_('New prizes committed.'), type=Message.SUCCESS))

        return ret
Example #9
0
 def test_dump_currency_table(self):
     db = currencydb()
     table = list(ccy.dump_currency_table())
     self.assertEqual(len(table), len(db) + 1)
Example #10
0
 def test2letters(self):
     ccys = currencydb()
     twol = {}
     for ccy in ccys.values():
         self.assertFalse(ccy.twoletterscode in twol)
         twol[ccy.twoletterscode] = ccy
Example #11
0
 def testiso(self):
     ccys = currencydb()
     iso = {}
     for ccy in ccys.values():
         self.assertFalse(ccy.isonumber in iso)
         iso[ccy.isonumber] = ccy
Example #12
0
 def testdefaultcountry(self):
     ccys = currencydb()
     for ccy in ccys.values():
         if ccy.code != 'XBT':
             self.assertEqual(ccy.code[:2], ccy.default_country)
Example #13
0
def test_2letters():
    ccys = currencydb()
    twol = {}
    for ccy in ccys.values():
        assert ccy.twoletterscode not in twol
        twol[ccy.twoletterscode] = ccy
Example #14
0
def test_iso():
    ccys = currencydb()
    iso = {}
    for ccy in ccys.values():
        assert ccy.isonumber not in iso
        iso[ccy.isonumber] = ccy
Example #15
0
def test_defaultcountry():
    ccys = currencydb()
    for ccy in ccys.values():
        if ccy.code != 'XBT':
            assert ccy.code[:2] == ccy.default_country
Example #16
0
def test_dump_currency_table():
    db = currencydb()
    table = list(dump_currency_table())
    assert len(table) == len(db) + 1