예제 #1
0
 def formatMutants(self):
     mutationLines = []
     if self.mutants:
         for mutantReference in sorted(self.mutants):
             mutant = self.mutants[mutantReference]
             mutationLines.append(renderMutant(mutant, firstPrefix='[{}] '.format(mutantReference), prefix='  '))
     return '\n'.join(mutationLines)
예제 #2
0
파일: eft.py 프로젝트: zzwpower/Pyfa
def exportEft(fit, options, callback):
    # EFT formatted export is split in several sections, each section is
    # separated from another using 2 blank lines. Sections might have several
    # sub-sections, which are separated by 1 blank line
    sections = []

    header = '[{}, {}]'.format(fit.ship.item.typeName, fit.name)

    # Section 1: modules, rigs, subsystems, services
    modsBySlotType = {}
    for module in fit.modules:
        modsBySlotType.setdefault(module.slot, []).append(module)
    modSection = []

    mutants = {}  # Format: {reference number: module}
    mutantReference = 1
    for slotType in SLOT_ORDER:
        rackLines = []
        modules = modsBySlotType.get(slotType, ())
        for module in modules:
            if module.item:
                # if module was mutated, use base item name for export
                if module.isMutated:
                    modName = module.baseItem.typeName
                else:
                    modName = module.item.typeName
                if module.isMutated and options[PortEftOptions.MUTATIONS]:
                    mutants[mutantReference] = module
                    mutationSuffix = ' [{}]'.format(mutantReference)
                    mutantReference += 1
                else:
                    mutationSuffix = ''
                modOfflineSuffix = ' {}'.format(
                    OFFLINE_SUFFIX
                ) if module.state == FittingModuleState.OFFLINE else ''
                if module.charge and options[PortEftOptions.LOADED_CHARGES]:
                    rackLines.append('{}, {}{}{}'.format(
                        modName, module.charge.typeName, modOfflineSuffix,
                        mutationSuffix))
                else:
                    rackLines.append('{}{}{}'.format(modName, modOfflineSuffix,
                                                     mutationSuffix))
            else:
                rackLines.append('[Empty {} slot]'.format(
                    FittingSlot(slotType).name.capitalize(
                    ) if slotType is not None else ''))
        if rackLines:
            modSection.append('\n'.join(rackLines))
    if modSection:
        sections.append('\n\n'.join(modSection))

    # Section 2: drones, fighters
    minionSection = []
    droneExport = exportDrones(fit.drones)
    if droneExport:
        minionSection.append(droneExport)
    fighterExport = exportFighters(fit.fighters)
    if fighterExport:
        minionSection.append(fighterExport)
    if minionSection:
        sections.append('\n\n'.join(minionSection))

    # Section 3: implants, boosters
    charSection = []
    if options[PortEftOptions.IMPLANTS]:
        implantExport = exportImplants(fit.implants)
        if implantExport:
            charSection.append(implantExport)
    if options[PortEftOptions.BOOSTERS]:
        boosterExport = exportBoosters(fit.boosters)
        if boosterExport:
            charSection.append(boosterExport)
    if charSection:
        sections.append('\n\n'.join(charSection))

    # Section 4: cargo
    if options[PortEftOptions.CARGO]:
        cargoExport = exportCargo(fit.cargo)
        if cargoExport:
            sections.append(cargoExport)

    # Section 5: mutated modules' details
    mutationLines = []
    if mutants and options[PortEftOptions.MUTATIONS]:
        for mutantReference in sorted(mutants):
            mutant = mutants[mutantReference]
            mutationLines.append(
                renderMutant(mutant,
                             firstPrefix='[{}] '.format(mutantReference),
                             prefix='  '))
    if mutationLines:
        sections.append('\n'.join(mutationLines))

    text = '{}\n\n{}'.format(header, '\n\n\n'.join(sections))

    if callback:
        callback(text)
    else:
        return text
예제 #3
0
 def activate(self, callingWindow, fullContext, mainItem, i):
     export = renderMutant(mainItem, prefix='  ')
     toClipboard(export)
예제 #4
0
파일: eft.py 프로젝트: poklj/Pyfa
def exportEft(fit, options):
    # EFT formatted export is split in several sections, each section is
    # separated from another using 2 blank lines. Sections might have several
    # sub-sections, which are separated by 1 blank line
    sections = []

    header = '[{}, {}]'.format(fit.ship.item.name, fit.name)

    # Section 1: modules, rigs, subsystems, services
    modsBySlotType = {}
    sFit = svcFit.getInstance()
    for module in fit.modules:
        modsBySlotType.setdefault(module.slot, []).append(module)
    modSection = []

    mutants = {}  # Format: {reference number: module}
    mutantReference = 1
    for slotType in SLOT_ORDER:
        rackLines = []
        modules = modsBySlotType.get(slotType, ())
        for module in modules:
            if module.item:
                mutated = bool(module.mutators)
                # if module was mutated, use base item name for export
                if mutated:
                    modName = module.baseItem.name
                else:
                    modName = module.item.name
                if mutated and options & Options.MUTATIONS.value:
                    mutants[mutantReference] = module
                    mutationSuffix = ' [{}]'.format(mutantReference)
                    mutantReference += 1
                else:
                    mutationSuffix = ''
                modOfflineSuffix = ' {}'.format(
                    OFFLINE_SUFFIX) if module.state == State.OFFLINE else ''
                if module.charge and sFit.serviceFittingOptions[
                        'exportCharges']:
                    rackLines.append('{}, {}{}{}'.format(
                        modName, module.charge.name, modOfflineSuffix,
                        mutationSuffix))
                else:
                    rackLines.append('{}{}{}'.format(modName, modOfflineSuffix,
                                                     mutationSuffix))
            else:
                rackLines.append('[Empty {} slot]'.format(
                    Slot.getName(slotType).capitalize(
                    ) if slotType is not None else ''))
        if rackLines:
            modSection.append('\n'.join(rackLines))
    if modSection:
        sections.append('\n\n'.join(modSection))

    # Section 2: drones, fighters
    minionSection = []
    droneLines = []
    for drone in sorted(fit.drones, key=lambda d: d.item.name):
        droneLines.append('{} x{}'.format(drone.item.name, drone.amount))
    if droneLines:
        minionSection.append('\n'.join(droneLines))
    fighterLines = []
    for fighter in sorted(fit.fighters, key=lambda f: f.item.name):
        fighterLines.append('{} x{}'.format(fighter.item.name,
                                            fighter.amountActive))
    if fighterLines:
        minionSection.append('\n'.join(fighterLines))
    if minionSection:
        sections.append('\n\n'.join(minionSection))

    # Section 3: implants, boosters
    if options & Options.IMPLANTS.value:
        charSection = []
        implantLines = []
        for implant in fit.implants:
            implantLines.append(implant.item.name)
        if implantLines:
            charSection.append('\n'.join(implantLines))
        boosterLines = []
        for booster in fit.boosters:
            boosterLines.append(booster.item.name)
        if boosterLines:
            charSection.append('\n'.join(boosterLines))
        if charSection:
            sections.append('\n\n'.join(charSection))

    # Section 4: cargo
    cargoLines = []
    for cargo in sorted(
            fit.cargo,
            key=lambda c:
        (c.item.group.category.name, c.item.group.name, c.item.name)):
        cargoLines.append('{} x{}'.format(cargo.item.name, cargo.amount))
    if cargoLines:
        sections.append('\n'.join(cargoLines))

    # Section 5: mutated modules' details
    mutationLines = []
    if mutants and options & Options.MUTATIONS.value:
        for mutantReference in sorted(mutants):
            mutant = mutants[mutantReference]
            mutationLines.append(
                renderMutant(mutant,
                             firstPrefix='[{}] '.format(mutantReference),
                             prefix='  '))
    if mutationLines:
        sections.append('\n'.join(mutationLines))

    return '{}\n\n{}'.format(header, '\n\n\n'.join(sections))
예제 #5
0
def exportEft(fit, options, callback):
    # EFT formatted export is split in several sections, each section is
    # separated from another using 2 blank lines. Sections might have several
    # sub-sections, which are separated by 1 blank line
    sections = []

    header = '[{}, {}]'.format(fit.ship.item.name, fit.name)

    # Section 1: modules, rigs, subsystems, services
    modsBySlotType = {}
    for module in fit.modules:
        modsBySlotType.setdefault(module.slot, []).append(module)
    modSection = []

    mutants = {}  # Format: {reference number: module}
    mutantReference = 1
    for slotType in SLOT_ORDER:
        rackLines = []
        modules = modsBySlotType.get(slotType, ())
        for module in modules:
            if module.item:
                # if module was mutated, use base item name for export
                if module.isMutated:
                    modName = module.baseItem.name
                else:
                    modName = module.item.name
                if module.isMutated and options[PortEftOptions.MUTATIONS]:
                    mutants[mutantReference] = module
                    mutationSuffix = ' [{}]'.format(mutantReference)
                    mutantReference += 1
                else:
                    mutationSuffix = ''
                modOfflineSuffix = ' {}'.format(OFFLINE_SUFFIX) if module.state == FittingModuleState.OFFLINE else ''
                if module.charge and options[PortEftOptions.LOADED_CHARGES]:
                    rackLines.append('{}, {}{}{}'.format(
                        modName, module.charge.name, modOfflineSuffix, mutationSuffix))
                else:
                    rackLines.append('{}{}{}'.format(modName, modOfflineSuffix, mutationSuffix))
            else:
                rackLines.append('[Empty {} slot]'.format(
                    FittingSlot(slotType).name.capitalize() if slotType is not None else ''))
        if rackLines:
            modSection.append('\n'.join(rackLines))
    if modSection:
        sections.append('\n\n'.join(modSection))

    # Section 2: drones, fighters
    minionSection = []
    droneLines = []
    for drone in sorted(fit.drones, key=lambda d: d.item.name):
        droneLines.append('{} x{}'.format(drone.item.name, drone.amount))
    if droneLines:
        minionSection.append('\n'.join(droneLines))
    fighterLines = []
    for fighter in sorted(fit.fighters, key=lambda f: f.item.name):
        fighterLines.append('{} x{}'.format(fighter.item.name, fighter.amountActive))
    if fighterLines:
        minionSection.append('\n'.join(fighterLines))
    if minionSection:
        sections.append('\n\n'.join(minionSection))

    # Section 3: implants, boosters
    if options[PortEftOptions.IMPLANTS]:
        charSection = []
        implantLines = []
        for implant in sorted(fit.implants, key=lambda i: i.slot or 0):
            implantLines.append(implant.item.name)
        if implantLines:
            charSection.append('\n'.join(implantLines))
        boosterLines = []
        for booster in sorted(fit.boosters, key=lambda b: b.slot or 0):
            boosterLines.append(booster.item.name)
        if boosterLines:
            charSection.append('\n'.join(boosterLines))
        if charSection:
            sections.append('\n\n'.join(charSection))

    # Section 4: cargo
    cargoLines = []
    for cargo in sorted(
        fit.cargo,
        key=lambda c: (c.item.group.category.name, c.item.group.name, c.item.name)
    ):
        cargoLines.append('{} x{}'.format(cargo.item.name, cargo.amount))
    if cargoLines:
        sections.append('\n'.join(cargoLines))

    # Section 5: mutated modules' details
    mutationLines = []
    if mutants and options[PortEftOptions.MUTATIONS]:
        for mutantReference in sorted(mutants):
            mutant = mutants[mutantReference]
            mutationLines.append(renderMutant(mutant, firstPrefix='[{}] '.format(mutantReference), prefix='  '))
    if mutationLines:
        sections.append('\n'.join(mutationLines))

    text = '{}\n\n{}'.format(header, '\n\n\n'.join(sections))

    if callback:
        callback(text)
    else:
        return text