Skip to main content

Parse a P6 .xer file to a Python object.

Project description

xerparser

Read the contents of a P6 .xer file and convert it into a Python object.

Disclaimers:
It's helpfull if you are already familiar with the mapping and schemas used by P6 during the export process. Refer to the Oracle Documentation for more information regarding how data is mapped to the XER format.
Tested on .xer files exported as versions 15.2 through 19.12.


Install

Windows:

pip install xerparser

Linux/Mac:

pip3 install xerparser

Usage

Import the Xer class from xerparser and pass the contents of a .xer file as an argument. Use the Xer class variable CODEC to set the proper encoding to decode the file.

from xerparser import Xer

file = r"/path/to/file.xer"
with open(file, encoding=Xer.CODEC, errors="ignore") as f:
    file_contents = f.read()
xer = Xer(file_contents)

Do not pass the the .xer file directly as an argument to the Xer class. The file must be decoded and read into a string, which can then be passed as an argument. Or, pass the .xer file into the Xer.reader classmethod, which accepts:

  • str or pathlib.Path objects for files stored locally or on a server.
  • Binary files from requests, Flask, FastAPI, etc...
from xerparser import Xer

file = r"/path/to/file.xer"
xer = Xer.reader(file)

Attributes

The tables stored in the .xer file are accessable as either Global, Project specific, Task specific, or Resource specific:

Global

xer.export_info           # export data
xer.activity_code_types   # dict of ACTVTYPE objects
xer.activity_code_values  # dict of ACTVCODE objects
xer.calendars             # dict of all CALENDAR objects
xer.financial_periods     # dict of FINDATES objects
xer.notebook_topics       # dict of MEMOTYPE objects
xer.projects              # dict of PROJECT objects
xer.project_code_types    # dict of PCATTYPE objects
xer.project_code_values   # dict of PCATVAL objects
xer.tasks                 # dict of all TASK objects
xer.relationships         # dict of all TASKPRED objects
xer.resources             # dict of RSRC objects
xer.resource_rates        # dict of RSRCRATE objects
xer.udf_types             # dict of UDFTYPE objects
xer.wbs_nodes             # dict of all PROJWBS objects

Project Specific

# Get first project
project = list(xer.projects.values())[0]

project.activity_codes        # list of project specific ACTVTYPE objects
project.calendars             # list of project specific CALENDAR objects
project.project_codes         # dict of PCATTYPE: PCATVAL objects
project.tasks                 # list of project specific TASK objects
project.relationships         # list of project specific TASKPRED objects
project.resources             # lest of project specific TASKRSRC objects
project.user_defined_fields   # dict of `UDFTYPE`: `UDF Value` pairs  
project.wbs_nodes             # list of project specific PROJWBS objects

WBS Specific

# Get projects root wbs node
wbs_node = project.wbs_root

wbs_node.children              # list of child PROJWBS objects
wbs_node.project               # PROJECT the WBS node belongs to
wbs_node.tasks                 # list of TASK objects assigned directly to WBS node
wbs_node.all_tasks             # list of TASK objects under the WBS node
wbs_node.user_defined_fields   # dict of `UDFTYPE`: `UDF Value` pairs  

Task Specific

# Get first task
task = project.tasks[0]

task.activity_codes       # dict of ACTVTYPE: ACTVCODE objects
task.memos                # list of TASKMEMO objects
task.periods              # list of TASKFIN objects
task.resources            # dict of TASKRSRC objects
task.user_defined_fields  # dict of `UDFTYPE`: `UDF Value` pairs 

Resource Specific

# Get first task resource
resource = list(task.resources.values())[0]

resource.periods              # list of TRSRCFIN objects
resource.user_defined_fields  # dict of `UDFTYPE`: `UDF Value` pairs 

Error Checking

Sometimes the xer file is corrupted during the export process. If this is the case, a CorruptXerFile Exception will be raised during initialization. A list of the errors can be accessed from the CorruptXerFile Exception, or by using the find_xer_errors function.

Option 1 - errors attribute of CorruptXerFile exception (preferred)

from xerparser import Xer, CorruptXerFile

file = r"/path/to/file.xer"
try:
    xer = Xer.reader(file)
except CorruptXerFile as e:
    for error in e.errors:
        print(error)

Option 2 - find_xer_errors function

from xerparser import parser, file_reader, find_xer_errors

file = r"/path/to/file.xer"
xer_data = parser(file_reader(file))
file_errors = find_xer_errors(xer_data)
for error in file_errors:
    print(error)

Errors

  • Minimum required tables - an error is recorded if one of the following tables is missing:

    • CALENDAR
    • PROJECT
    • PROJWBS
    • TASK
  • Required table pairs - an error is recorded if Table 1 is included but not Table 2:

    Table 1 Table 2 Notes
    TASKFIN FINDATES Financial Period Data for Task
    TRSRCFIN FINDATES Financial Period Data for Task Resource
    TASKRSRC RSRC Resource Data
    TASKMEMO MEMOTYPE Notebook Data
    ACTVCODE ACTVTYPE Activity Code Data
    TASKACTV ACTVCODE Activity Code Data
    PCATVAL PCATTYPE Project Code Data
    PROJPCAT PCATVAL Project Code Data
    UDFVALUE UDFTYPE User Defined Field Data
  • Non-existent calendars assigned to tasks.

  • Non-existent resources assigned to task resources.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xerparser-0.13.9.tar.gz (38.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xerparser-0.13.9-py3-none-any.whl (49.3 kB view details)

Uploaded Python 3

File details

Details for the file xerparser-0.13.9.tar.gz.

File metadata

  • Download URL: xerparser-0.13.9.tar.gz
  • Upload date:
  • Size: 38.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.3 Linux/5.15.167.4-microsoft-standard-WSL2

File hashes

Hashes for xerparser-0.13.9.tar.gz
Algorithm Hash digest
SHA256 e7c86d4ab98be83c37769280366ce3d8da63976e1e7f9f19e58008e78e0f33d2
MD5 eafc31f829dfabf649f7eca299ba8030
BLAKE2b-256 475251a7958b06d4a3c574b0a5cc1e42445b54a3411db5072668ad75c4729dac

See more details on using hashes here.

File details

Details for the file xerparser-0.13.9-py3-none-any.whl.

File metadata

  • Download URL: xerparser-0.13.9-py3-none-any.whl
  • Upload date:
  • Size: 49.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.3 Linux/5.15.167.4-microsoft-standard-WSL2

File hashes

Hashes for xerparser-0.13.9-py3-none-any.whl
Algorithm Hash digest
SHA256 9c6fcc375857849ca83108071e4cd94c9d671f3beb51323d15d27d0be8d46d60
MD5 903b332544f2288c9e86f47301ef468b
BLAKE2b-256 6b596bc4b493ef746debc4541f59d72b332355d4f647fca4e05846deedd73488

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page