Working with File Metadata and File Data

Eptalights provides two levels of file representation:

  • FileMetadataModel — lightweight structural metadata (fast, minimal loading)

  • FileDataModel — fully hydrated analysis data (functions, classes, CFGs, etc.)

This separation allows efficient database access while supporting deep program analysis when needed.

File Metadata vs File Data

File Representation Models

Model

Description

FileMetadataModel

Lightweight file structure containing class names, function IDs, and tokenized properties

FileDataModel

Fully loaded file containing resolved FunctionModel and ClassDataModel objects

1. Fetch File Metadata

Use metadata when you only need structural information about a file.

file_meta = api.get_file_metadata_by_filepath(
    "/example/src/user_service.php"
)

print(file_meta.filepath)

# output
"""
/example/src/user_service.php
"""

Metadata includes:

  • class names

  • function IDs

  • tokenized class properties

print(file_meta.functions)

print(file_meta.classes)

2. Convert Metadata → Full File Data

Once metadata is loaded, you can hydrate it into full analysis objects:

file_data = api.get_file_data_by_metadata(file_meta)

This step:

  • Resolves function IDs into full FunctionModel objects

  • Loads class methods into executable analysis models

  • Preserves structural metadata

3. Fetch File Data Directly

You can skip metadata and directly fetch full analysis data:

file_data = api.get_file_data_by_filepath(
    "/example/src/user_service.php"
)

This internally performs:

  1. Load FileMetadataModel from database

  2. Collect all function IDs

  3. Batch fetch FunctionModel objects

  4. Construct FileDataModel

4. Working with File Data

FileDataModel contains fully resolved program structures.

print(file_data.filepath)

print(file_data.functions.keys())

print(file_data.classes.keys())

5. Access Class Data

cls = file_data.classes["UserService"]

print(cls.class_props)

print(cls.class_methods.keys())

Each class contains:

6. Method Resolution Example

method = file_data.classes["UserService"].class_methods["create_user"]

print(method.name)

Performance Notes

Use FileMetadataModel when performing:

  • fast structural scanning of large codebases

  • indexing files without loading functions

Use FileDataModel when performing:

  • CFG analysis

  • function-level inspection

  • decompilation

  • call graph traversal

Metadata → Data conversion is optimized via batch function loading for efficiency.