xer-reader


Namexer-reader JSON
Version 0.4.0 PyPI version JSON
download
home_pagehttps://github.com/jjCode01/xer-reader
SummaryRead and parse a Primavera P6 xer file.
upload_time2024-11-22 05:12:49
maintainerNone
docs_urlNone
authorJesse Jones
requires_python<4.0,>=3.10
licenseGPL-3.0-only
keywords primavera p6 xer schedule scheduling planning project management project controls
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Xer-Reader

Read the contents of a Primavera P6 XER file using Python.  

Xer-Reader makes it easy to read, parse, and convert the data in a XER file to other formats.

*Refer to the [Oracle Documentation]( https://docs.oracle.com/cd/F25600_01/English/Mapping_and_Schema/xer_import_export_data_map_project/index.htm) 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**:

```bash
pip install xer-reader
```

**Linux/Mac**:

```bash
pip3 install xer-reader
```

## Usage  

Import the `XerReader` class from `xer_reader`.
```python
from xer_reader import XerReader
```

Create a new instance of an `XerReader` object by passing in the XER file as an argument. `XerReader` can accept the file path represented as a `str` or pathlib `Path` object, or a Binary file received as a response from requests, Flask, FastAPI, etc...

```python
file = r"/path/to/file.xer"
reader = XerReader(file)
```

### Attributes  

* `data` [str] - *The contents of the XER file as a string.*
* `export_date` [datetime] - *The date the XER file was exported.*
* `export_user` [str] - *The P6 user who export the XER file.*
* `export_version` [str] - *The P6 verison used to export the XER file.*
* `file_name` [str] - *The name of the file without the '.xer' extension.*

### Methods

**`check_errors()`** -> *list[str]*  
Checks the XER file for missing tables and orphan data, and returns the results as a list of errors.  

* Missing tables can occur when an entry in *Table 1* points to an entry in *Table 2* but *Table 2* does not exist at all.
* Orphan data occurs when an entry in *Table 1* points to an entry *Table 2* but the entry in *Table 2* does not exist.

**`delete_tables(*table_names: str)`** -> *str*  
Delete a variable number of tables (*table_names*) from the XER file data and returns a new string (*Does not modify `XerReader.data` attribute*).  

In the following example the tables associated with User Defined Fields are removed from the XER file contents and stored in a new variable `new_xer_data`, which can then be written to a new XER file:
```python
new_xer_data = reader.delete_tables("UDFTYPE", "UDFVALUE")

with open("New_XER.xer", "w", encoding=XerReader.CODEC) as new_xer_file:
    new_xer_file.write(new_xer_data)
```

**`get_table_names()`** -> *list[str]*  
Returns a list of table names included in the XER file.  

**`get_table_str(table_name: str)`** -> *str*  
Returns the tab seperated text for a specific table in the XER file.

**`has_table(table_name: str)`** -> *bool*  
Return True if table (`table_name`) if found in the XER file.

**`parse_tables()`** -> *dict[str, Table]*  
Returns a dictionary with the table name as the key and a `Table` object as the value.  

**`to_csv(file_directory: str | Path, table_names: list[str], delimeter: str)`** -> *None*  
Generate a CSV file for each table in the XER file. CSV files will be created in the current working directory.   
Optional `file_directory`: Pass a string or Path object to speficy a folder to store the CSV files in.  
Optional `table_names`: List of tables names to save to CSV files.  
Optional `delimeter`: Change the default delimeter from a `tab` to another string (e.g. a coma ",").  

```python
reader.to_csv(table_names=["TASK", "PROJWBS"], delimeter=",")
```

**`to_excel()`** -> *None*  
Generate an Excel (.xlsx) file with each table in the XER file on its own spreadsheet. The Excel file will be create in the 
current working directory.  

**`to_json(*tables: str)`** -> *str*  
Generate a json compliant string representation of the tables in the XER file.  
Optional: Pass in specific table names to include in the json string.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/jjCode01/xer-reader",
    "name": "xer-reader",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.10",
    "maintainer_email": null,
    "keywords": "primavera, p6, xer, schedule, scheduling, planning, project management, project controls",
    "author": "Jesse Jones",
    "author_email": "code@seqmanagement.com",
    "download_url": "https://files.pythonhosted.org/packages/60/a2/9a1ce71822383a260282575a3b65d86eb9181d99492f6294bed2cce68950/xer_reader-0.4.0.tar.gz",
    "platform": null,
    "description": "# Xer-Reader\n\nRead the contents of a Primavera P6 XER file using Python.  \n\nXer-Reader makes it easy to read, parse, and convert the data in a XER file to other formats.\n\n*Refer to the [Oracle Documentation]( https://docs.oracle.com/cd/F25600_01/English/Mapping_and_Schema/xer_import_export_data_map_project/index.htm) for more information regarding how data is mapped to the XER format.  \nTested on XER files exported as versions 15.2 through 19.12.*  \n\n## Install\n\n**Windows**:\n\n```bash\npip install xer-reader\n```\n\n**Linux/Mac**:\n\n```bash\npip3 install xer-reader\n```\n\n## Usage  \n\nImport the `XerReader` class from `xer_reader`.\n```python\nfrom xer_reader import XerReader\n```\n\nCreate a new instance of an `XerReader` object by passing in the XER file as an argument. `XerReader` can accept the file path represented as a `str` or pathlib `Path` object, or a Binary file received as a response from requests, Flask, FastAPI, etc...\n\n```python\nfile = r\"/path/to/file.xer\"\nreader = XerReader(file)\n```\n\n### Attributes  \n\n* `data` [str] - *The contents of the XER file as a string.*\n* `export_date` [datetime] - *The date the XER file was exported.*\n* `export_user` [str] - *The P6 user who export the XER file.*\n* `export_version` [str] - *The P6 verison used to export the XER file.*\n* `file_name` [str] - *The name of the file without the '.xer' extension.*\n\n### Methods\n\n**`check_errors()`** -> *list[str]*  \nChecks the XER file for missing tables and orphan data, and returns the results as a list of errors.  \n\n* Missing tables can occur when an entry in *Table 1* points to an entry in *Table 2* but *Table 2* does not exist at all.\n* Orphan data occurs when an entry in *Table 1* points to an entry *Table 2* but the entry in *Table 2* does not exist.\n\n**`delete_tables(*table_names: str)`** -> *str*  \nDelete a variable number of tables (*table_names*) from the XER file data and returns a new string (*Does not modify `XerReader.data` attribute*).  \n\nIn the following example the tables associated with User Defined Fields are removed from the XER file contents and stored in a new variable `new_xer_data`, which can then be written to a new XER file:\n```python\nnew_xer_data = reader.delete_tables(\"UDFTYPE\", \"UDFVALUE\")\n\nwith open(\"New_XER.xer\", \"w\", encoding=XerReader.CODEC) as new_xer_file:\n    new_xer_file.write(new_xer_data)\n```\n\n**`get_table_names()`** -> *list[str]*  \nReturns a list of table names included in the XER file.  \n\n**`get_table_str(table_name: str)`** -> *str*  \nReturns the tab seperated text for a specific table in the XER file.\n\n**`has_table(table_name: str)`** -> *bool*  \nReturn True if table (`table_name`) if found in the XER file.\n\n**`parse_tables()`** -> *dict[str, Table]*  \nReturns a dictionary with the table name as the key and a `Table` object as the value.  \n\n**`to_csv(file_directory: str | Path, table_names: list[str], delimeter: str)`** -> *None*  \nGenerate a CSV file for each table in the XER file. CSV files will be created in the current working directory.   \nOptional `file_directory`: Pass a string or Path object to speficy a folder to store the CSV files in.  \nOptional `table_names`: List of tables names to save to CSV files.  \nOptional `delimeter`: Change the default delimeter from a `tab` to another string (e.g. a coma \",\").  \n\n```python\nreader.to_csv(table_names=[\"TASK\", \"PROJWBS\"], delimeter=\",\")\n```\n\n**`to_excel()`** -> *None*  \nGenerate an Excel (.xlsx) file with each table in the XER file on its own spreadsheet. The Excel file will be create in the \ncurrent working directory.  \n\n**`to_json(*tables: str)`** -> *str*  \nGenerate a json compliant string representation of the tables in the XER file.  \nOptional: Pass in specific table names to include in the json string.\n",
    "bugtrack_url": null,
    "license": "GPL-3.0-only",
    "summary": "Read and parse a Primavera P6 xer file.",
    "version": "0.4.0",
    "project_urls": {
        "Homepage": "https://github.com/jjCode01/xer-reader",
        "Repository": "https://github.com/jjCode01/xer-reader"
    },
    "split_keywords": [
        "primavera",
        " p6",
        " xer",
        " schedule",
        " scheduling",
        " planning",
        " project management",
        " project controls"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7ef30f89f62947ef66ce4c092bbee8965f7750054680efb15dbb4ea694fb025e",
                "md5": "59e3c0df82df8c4349720cef66399e9f",
                "sha256": "ad8484ac9bf1f782c146c254f2afbc444ee87a7720a907b81cae8b64f5c0ae1b"
            },
            "downloads": -1,
            "filename": "xer_reader-0.4.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "59e3c0df82df8c4349720cef66399e9f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.10",
            "size": 21607,
            "upload_time": "2024-11-22T05:12:47",
            "upload_time_iso_8601": "2024-11-22T05:12:47.393018Z",
            "url": "https://files.pythonhosted.org/packages/7e/f3/0f89f62947ef66ce4c092bbee8965f7750054680efb15dbb4ea694fb025e/xer_reader-0.4.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "60a29a1ce71822383a260282575a3b65d86eb9181d99492f6294bed2cce68950",
                "md5": "f0072f4a0641d59bbf34d763611f82d3",
                "sha256": "a40371957c3ba27debae272eacd3b6e9b7517dc354f670f3c848e4d2cb2eb051"
            },
            "downloads": -1,
            "filename": "xer_reader-0.4.0.tar.gz",
            "has_sig": false,
            "md5_digest": "f0072f4a0641d59bbf34d763611f82d3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.10",
            "size": 21622,
            "upload_time": "2024-11-22T05:12:49",
            "upload_time_iso_8601": "2024-11-22T05:12:49.123807Z",
            "url": "https://files.pythonhosted.org/packages/60/a2/9a1ce71822383a260282575a3b65d86eb9181d99492f6294bed2cce68950/xer_reader-0.4.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-22 05:12:49",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jjCode01",
    "github_project": "xer-reader",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "xer-reader"
}
        
Elapsed time: 0.50810s