2020-12-15 14:49:29 +11:00
|
|
|
# bcf
|
|
|
|
|
|
|
|
|
|
A simple Python implementation of BCF. The data model is described in `data.py`.
|
|
|
|
|
Manipulation of BCF-XML is available via `bcfxml.py` and manipulation of BCF-API
|
|
|
|
|
is available via `bcfapi.py`.
|
|
|
|
|
|
2021-06-17 18:30:25 +10:00
|
|
|
- BCF-XML version 2.1: Fully supported
|
|
|
|
|
- BCF-API version 2.1: Not supported, will probably tackle this after BCF-API v3.0
|
|
|
|
|
- BCF-XML version 3.0: Almost fully supported, except for the documents module
|
|
|
|
|
- BCF-API version 3.0: Not supported, but work underway to support it
|
2020-12-17 22:47:15 +11:00
|
|
|
|
|
|
|
|
## bcfxml
|
|
|
|
|
|
|
|
|
|
The `bcfxml` module lets you interact with the BCF-XML standard.
|
|
|
|
|
|
|
|
|
|
```
|
2021-05-17 05:04:31 +05:30
|
|
|
from bcf import bcfxml
|
2020-12-17 22:47:15 +11:00
|
|
|
|
|
|
|
|
|
|
|
|
|
# Load a project
|
2021-05-17 05:04:31 +05:30
|
|
|
bcfxml = bcfxml.load("/path/to/file.bcf")
|
|
|
|
|
|
2020-12-17 22:47:15 +11:00
|
|
|
|
|
|
|
|
# The project is also stored in the module
|
|
|
|
|
# project == bcfxml.project
|
2021-05-17 05:04:31 +05:30
|
|
|
project=bcfxml.get_project()
|
2020-12-17 22:47:15 +11:00
|
|
|
print(project.name)
|
|
|
|
|
|
|
|
|
|
# To edit a project, just modify the object directly
|
|
|
|
|
bcfxml.project.name = "New name"
|
|
|
|
|
bcfxml.edit_project()
|
|
|
|
|
|
|
|
|
|
# The BCF file is extracted to this temporary directory
|
|
|
|
|
print(bcfxml.filepath)
|
|
|
|
|
|
|
|
|
|
# Get a dictionary of topics
|
|
|
|
|
topics = bcfxml.get_topics()
|
|
|
|
|
|
|
|
|
|
# Note: topics == bcfxml.topics
|
|
|
|
|
for guid, topic in bcfxml.topics.items():
|
|
|
|
|
print("Topic guid is", guid)
|
|
|
|
|
print("Topic guid is", topic.guid)
|
|
|
|
|
print("Topic title is", topic.title)
|
|
|
|
|
|
|
|
|
|
# Fetch extra data about a topic
|
|
|
|
|
header = bcfxml.get_header(guid)
|
|
|
|
|
comments = bcfxml.get_comments(guid)
|
|
|
|
|
viewpoints = bcfxml.get_viewpoints(guid)
|
|
|
|
|
|
|
|
|
|
# Note: comments == topic.comments, and so on
|
|
|
|
|
for comment_guid, comment in comments.items():
|
|
|
|
|
print(comment_guid)
|
|
|
|
|
print(comment.comment)
|
|
|
|
|
print(comment.author)
|
|
|
|
|
|
|
|
|
|
# Get a particular topic
|
|
|
|
|
topic = bcfxml.get_topic(guid)
|
|
|
|
|
|
|
|
|
|
# Modify a topic
|
|
|
|
|
topic.title = "New title"
|
|
|
|
|
bcfxml.edit_topic(topic)
|
|
|
|
|
```
|
2021-07-15 18:02:16 +10:00
|
|
|
|
|
|
|
|
## bcfapi
|
|
|
|
|
|
|
|
|
|
The `bcfapi` module lets you interact with the BCF-API standard.
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
from bcf.v3.bcfapi import Client
|
|
|
|
|
|
|
|
|
|
client_id = "YOUR_CLIENT_ID"
|
|
|
|
|
client_secret = "YOUR_CLIENT_SECRET"
|
|
|
|
|
|
|
|
|
|
client = Client(client_id, client_secret)
|
|
|
|
|
client.set_urls(base_url="OPENCDE_BASEURL")
|
|
|
|
|
auth_methods = client.get_auth_methods()
|
|
|
|
|
|
|
|
|
|
# Our library currently only implements the authorization_code flow
|
|
|
|
|
if "authorization_code" in auth_methods:
|
|
|
|
|
client.login()
|
|
|
|
|
|
|
|
|
|
versions = client.get_versions()
|
|
|
|
|
|
|
|
|
|
if "3.0" in versions:
|
|
|
|
|
client.set_version(version="3.0")
|
|
|
|
|
|
|
|
|
|
data = client.get_projects()
|
|
|
|
|
print(data)
|
|
|
|
|
project_id = data[0]["project_id"]
|
|
|
|
|
print(project_id)
|
|
|
|
|
data = client.get_project(project_id)
|
|
|
|
|
print(data)
|
|
|
|
|
data = client.get_extensions(project_id)
|
|
|
|
|
print(data)
|
|
|
|
|
```
|