def test_nt_with_defs_delegates_to_nt(nt_mock):
    class NTClass(object):  # pylint: disable=too-few-public-methods
        pass
    nt_mock.return_value = NTClass
    tuple_class = namedtuple_with_defaults(sentinel.name, sentinel.fields,
                                           defaults=sentinel.defaults)
    ok_(NTClass in tuple_class.__bases__,
        'NamedTuple is not base of returned tuple class')
    nt_mock.assert_called_once_with(sentinel.name, sentinel.fields)
Exemple #2
0
def test_nt_with_defs_delegates_to_nt(nt_mock):
    class NTClass(object):  # pylint: disable=too-few-public-methods
        pass

    nt_mock.return_value = NTClass
    tuple_class = namedtuple_with_defaults(sentinel.name,
                                           sentinel.fields,
                                           defaults=sentinel.defaults)
    ok_(NTClass in tuple_class.__bases__,
        'NamedTuple is not base of returned tuple class')
    nt_mock.assert_called_once_with(sentinel.name, sentinel.fields)
    def test_mutable_defaults_work(self):
        TestTuple = namedtuple_with_defaults(
            'TestTuple', 'a', defaults=lambda: {
                'a': [],
            })

        first = TestTuple()
        first.a.append('first')
        second = TestTuple()
        second.a.append('second')
        self.assertEqual(first.a, ['first'])
        self.assertEqual(second.a, ['second'])
Exemple #4
0
    def test_mutable_defaults_work(self):
        TestTuple = namedtuple_with_defaults('TestTuple',
                                             'a',
                                             defaults=lambda: {
                                                 'a': [],
                                             })

        first = TestTuple()
        first.a.append('first')
        second = TestTuple()
        second.a.append('second')
        self.assertEqual(first.a, ['first'])
        self.assertEqual(second.a, ['second'])
Exemple #5
0
            try:
                return bits.index(pattern)
            except ValueError:
                return len(bits)

        min_index = min(get_index(p, bits) for p in self._patterns)

        return bits[:min_index], min_index

    def to_bits(self, val, **kwargs):  # pylint: disable=no-self-use
        return val


SchemaPiece = namedtuple_with_defaults(
    'SchemaPiece',
    ['field', 'type', 'condition', 'multiple'],
    defaults={'condition': None,
              'multiple': None})


class ParseError(Exception):
    pass


class BinarySchema(object):
    UNPARSED_FIELD = '__unparsed'
    PARENT_FIELD = '__parent'

    def __init__(self, schema):
        self._schema = schema
Exemple #6
0
from .constants import DEFAULT_CONVERSIONS
from .conversions import get_conversion_table, CantConvert

logger = logging.getLogger(__name__)  # pylint: disable=invalid-name

_LogData = namedtuple_with_defaults(
    'LogData',
    [
        'name',
        'nutritional_value',
        'parts',
        'log_line',
        'incomplete',
        'ingredient',
        'is_leaf',
    ],
    defaults=lambda: {
        'parts': [],
        'log_line': None,
        'incomplete': False,
        'ingredient': None,
        'is_leaf': False,
    }
)  # yapf: disable


class LogData(_LogData):
    __slots__ = ()

    @classmethod
 def setUp(self):
     # pylint: disable=too-few-public-methods
     self.tuple_class = namedtuple_with_defaults(
         'TestTuple', 'a,b,c', defaults=lambda: {
             'b': sentinel.b_default,
         })
 def setUp(self):
     self.tuple_class = namedtuple_with_defaults(
         'TestTuple', ['a', 'b', 'c'],
         defaults=dict(b=sentinel.b_default))
Exemple #9
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division

import collections

from pignacio_scripts.namedtuple import namedtuple_with_defaults

from .logger import Logger
from .schema import Integer, BinarySchema, SchemaPiece

PropertyDef = namedtuple_with_defaults('PropertyDef',
                                       ['id', 'field_sizes', 'fmt_string',
                                        'offsets'],
                                       defaults={'offsets': None})
_Property = collections.namedtuple('Property', ['definition', 'values'])
PropList = collections.namedtuple('PropList', ['properties', 'terminated'])


class Property(_Property):
    __slots__ = ()

    def as_game_str(self):
        return self.definition.fmt_string.format(*self.values)

_PROPERTIES = {p.id: p for p in [
    PropertyDef(0, [10], '{:+d} to Strength', offsets=[32]),
    PropertyDef(1, [10], '{:+d} to Energy', offsets=[32]),
    PropertyDef(2, [10], '{:+d} to Dexterity', offsets=[32]),
    PropertyDef(3, [10], '{:+d} to Vitality', offsets=[32]),
    PropertyDef(7, [10], '{:+d} to Life', offsets=[32]),
Exemple #10
0
def default_sort_key(item):
    return (
        # 1. Sort by quality
        -item.quality_id(),
        # 2.a. Magic items: most affixes first, then sort by affix
        -len([affix for affix in item.magic_affixes() if affix]),
        item.magic_affixes(),
    )


def default_sort(items):
    return sorted(items, key=default_sort_key)


ItemFilter = namedtuple_with_defaults('ItemFilter',
                                      ['name', 'filter', 'sort'],
                                      defaults={'sort': default_sort})


def item_type_filter(item_type):
    return ItemFilter(name=item_type, filter=lambda i: i.type() == item_type)


def items_to_rows(items):
    rows = collections.defaultdict(list)
    for item in items:
        item_type = item['item']['item_type']
        rows[item_type].append(item)

    return [row for _id, row in sorted(rows.items())]
Exemple #11
0
 def setUp(self):
     # pylint: disable=too-few-public-methods
     self.tuple_class = namedtuple_with_defaults(
         'TestTuple', 'a,b,c', defaults=lambda: {
             'b': sentinel.b_default,
         })
Exemple #12
0
 def setUp(self):
     self.tuple_class = namedtuple_with_defaults(
         'TestTuple', ['a', 'b', 'c'], defaults=dict(b=sentinel.b_default))