Use import.resources instead of __file__

Potentially fix #257 and allow zip-safe = true in pyproject.toml

Signed-off-by: Arthit Suriyawongkul <arthit@gmail.com>
GitOrigin-RevId: 7636b1b686f5b7541cfa7d67b27461c7b23e0a1e
Change-Id: I23678eb4f684a1634d9db85d212f6e6fd1c5ab8e
diff --git a/src/spdx_tools/spdx3/writer/json_ld/json_ld_writer.py b/src/spdx_tools/spdx3/writer/json_ld/json_ld_writer.py
index 69a4d76..3c3e081 100644
--- a/src/spdx_tools/spdx3/writer/json_ld/json_ld_writer.py
+++ b/src/spdx_tools/spdx3/writer/json_ld/json_ld_writer.py
@@ -2,20 +2,24 @@
 #
 # SPDX-License-Identifier: Apache-2.0
 import json
-import os
+from importlib import resources
 
 from spdx_tools.spdx3.payload import Payload
-from spdx_tools.spdx3.writer.json_ld.json_ld_converter import convert_payload_to_json_ld_list_of_elements
+from spdx_tools.spdx3.writer.json_ld.json_ld_converter import (
+    convert_payload_to_json_ld_list_of_elements,
+)
 
 
 def write_payload(payload: Payload, file_name: str):
     element_list = convert_payload_to_json_ld_list_of_elements(payload)
 
     # this will be obsolete as soon as the context is publicly available under some URI
-    with open(os.path.join(os.path.dirname(__file__), "context.json"), "r") as infile:
+    # Note: 3.0.1 context is now available at
+    # https://spdx.org/rdf/3.0.1/spdx-context.jsonld
+    with resources.files("spdx_tools.spdx3.writer.json_ld").joinpath("context.json").open("r") as infile:
         context = json.load(infile)
 
     complete_dict = {"@context": context, "@graph": element_list}
 
-    with open(file_name + ".jsonld", "w") as out:
+    with open(file_name + ".jsonld", "w", encoding="utf-8") as out:
         json.dump(complete_dict, out, indent=2)
diff --git a/src/spdx_tools/spdx3/writer/json_ld/owl_to_context.py b/src/spdx_tools/spdx3/writer/json_ld/owl_to_context.py
index f6bc7c3..cdeb314 100644
--- a/src/spdx_tools/spdx3/writer/json_ld/owl_to_context.py
+++ b/src/spdx_tools/spdx3/writer/json_ld/owl_to_context.py
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: Apache-2.0
 import json
-import os.path
+from importlib import resources
 
 # current workflow: markdown files + spec_parser -> model.ttl -> convert to json_ld: SPDX_OWL.json ->
 # use the function below to generate context.json
@@ -108,8 +108,11 @@
         else:
             print(f"unknown node_type: {node_type}")
 
-    with open(os.path.join(os.path.dirname(__file__), "context.json"), "w") as infile:
-        json.dump(context_dict, infile)
+    with resources.as_file(
+        resources.files("spdx_tools.spdx3.writer.json_ld").joinpath("context.json")
+    ) as context_path:
+        with open(context_path, "w", encoding="utf-8") as outfile:
+            json.dump(context_dict, outfile)
 
 
 if __name__ == "__main__":