-
Notifications
You must be signed in to change notification settings - Fork 2
/
file_upload_download.py
68 lines (59 loc) · 2.16 KB
/
file_upload_download.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import os
from io import StringIO
from osw.auth import CredentialManager
from osw.core import OSW
from osw.wtsite import WtSite
# credential manager
# can use a file or hardcode the credentials, otherwise the user will be prompted to enter them
cm = CredentialManager(
cred_filepath=os.path.join(
os.path.dirname(os.path.abspath(__file__)), "accounts.pwd.yaml"
)
# CredentialManager.UserPwdCredential(
# iri=wiki_domain, username=wiki_username, password=wiki_password
# )
)
# change the domain to your osw instance
osw_obj = OSW(
site=WtSite(WtSite.WtSiteConfig(iri="wiki-dev.open-semantic-lab.org", cred_mngr=cm))
)
# load the required schemas / data classes
osw_obj.fetch_schema(
OSW.FetchSchemaParam(
schema_title=[
"Category:OSW11a53cdfbdc24524bf8ac435cbf65d9d", # WikiFile
"Category:OSW3e3f5dd4f71842fbb8f270e511af8031", # LocalFile
],
mode="replace",
)
)
# import the controller modules
# note: since they depend on the data classes, they must be imported after the schemas are loaded
from osw.controller.file.local import ( # noqa (ignore flake8 warning)
LocalFileController,
)
from osw.controller.file.wiki import WikiFileController # noqa (ignore flake8 warning)
# create a local file
# with open("dummy.txt", "w") as f:
# f.write("Hello World!")
lf = LocalFileController(path="dummy.txt") # here an uuid already exists
lf.put(StringIO("Hello World!"))
# create a remote file (here: a wiki file)
wf = WikiFileController(osw=osw_obj)
# or cast to wiki wile to keep all common attributes
wf = lf.cast(WikiFileController, osw=osw_obj)
# which is equivalent to
wf = WikiFileController.from_other(lf, osw=osw_obj)
# upload the local file to the remote file
wf.put_from(lf)
# write new content on the fly
wf.put(StringIO("Some new content"))
# get an existing file
file = osw_obj.load_entity(f"{wf.namespace}:{wf.title}") # the file
wf2 = file.cast(WikiFileController, osw=osw_obj) # the file controller
lf2 = LocalFileController.from_other(wf2, path="dummy2.txt")
lf2.put_from(wf2)
# delete the files
lf.delete()
wf.delete() # note: wf2 actually points to the same file as wf
lf2.delete()