Beispiel #1
0
def find_converter(path):
    for pattern, converter in CONVERTERS:
        if fnmatch.fnmatch(path, pattern):
            conv = converter
            break
    else:
        conv = converters.NoopConverter()
    return conv
Beispiel #2
0
# - checks that the .pbit.extract folder is up to date with the latest .pbit (i.e. they match exactly - and the .pbit hasn't been exported but user forgot to run the extract script)
# - adds a warning (with y/n continue feedback) if the .pbix has been updated *after* the latest .pbit.extract is updated. (I.e. they maybe forgot to export the latest .pbit and extract, or exported .pbit but forgot to extract.) Note that this will be obvious in the case of only a single change (as it were) - since .pbix aren't tracked, they'll see no changes to git tracked files.

import zipfile
import os
import shutil
import fnmatch
import converters

CONVERTERS = [
    ('DataModelSchema', converters.JSONConverter('utf-16-le')),
    ('DiagramState', converters.JSONConverter('utf-16-le')),
    ('Report/Layout', converters.JSONConverter('utf-16-le')),
    ('Report/LinguisticSchema', converters.XMLConverter('utf-16-le', False)),
    ('[Content_Types].xml', converters.XMLConverter('utf-8-sig', True)),
    ('SecurityBindings', converters.NoopConverter()),
    ('Settings', converters.NoopConverter()),
    ('Version', converters.NoopConverter()),
    ('Report/StaticResources/', converters.NoopConverter()),
    ('DataMashup', converters.DataMashupConverter()),
    ('Metadata', converters.MetadataConverter()),
    ('*.json', converters.JSONConverter('utf-8'))
]


def find_converter(path):
    for pattern, converter in CONVERTERS:
        if fnmatch.fnmatch(path, pattern):
            conv = converter
            break
    else:
Beispiel #3
0
import json
import re
from io import BytesIO
import struct
from lxml import etree
import os
import shutil
import converters

CONVERTERS = {
    'DataModelSchema': converters.JSONConverter('utf-16-le'),
    'DiagramState': converters.JSONConverter('utf-16-le'),
    'Report/Layout': converters.JSONConverter('utf-16-le'),
    'Report/LinguisticSchema': converters.XMLConverter('utf-16-le', False),
    '[Content_Types].xml': converters.XMLConverter('utf-8-sig', True),
    'SecurityBindings': converters.NoopConverter(),
    'Settings': converters.NoopConverter(),
    'Version': converters.NoopConverter(),
    'Report/StaticResources/': converters.NoopConverter(),
    'DataMashup': converters.DataMashupConverter(),
    'Metadata': converters.MetadataConverter()
}


def extract_pbit(pbit_path, extracted_path):
    """
    Convert a pbit to vcs format
    """
    # TODO: check ends in pbit
    # TODO: check all expected files are present (in the right order)
    outdir = pbit_path + '.extract'