commonmeta-py 0.23__py3-none-any.whl → 0.25__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. commonmeta/__init__.py +96 -0
  2. commonmeta/api_utils.py +77 -0
  3. commonmeta/author_utils.py +260 -0
  4. commonmeta/base_utils.py +121 -0
  5. commonmeta/cli.py +200 -0
  6. commonmeta/constants.py +587 -0
  7. commonmeta/crossref_utils.py +575 -0
  8. commonmeta/date_utils.py +193 -0
  9. commonmeta/doi_utils.py +273 -0
  10. commonmeta/metadata.py +320 -0
  11. commonmeta/readers/__init__.py +1 -0
  12. commonmeta/readers/cff_reader.py +199 -0
  13. commonmeta/readers/codemeta_reader.py +112 -0
  14. commonmeta/readers/commonmeta_reader.py +13 -0
  15. commonmeta/readers/crossref_reader.py +409 -0
  16. commonmeta/readers/crossref_xml_reader.py +505 -0
  17. commonmeta/readers/csl_reader.py +98 -0
  18. commonmeta/readers/datacite_reader.py +390 -0
  19. commonmeta/readers/datacite_xml_reader.py +359 -0
  20. commonmeta/readers/inveniordm_reader.py +218 -0
  21. commonmeta/readers/json_feed_reader.py +420 -0
  22. commonmeta/readers/kbase_reader.py +205 -0
  23. commonmeta/readers/ris_reader.py +103 -0
  24. commonmeta/readers/schema_org_reader.py +506 -0
  25. commonmeta/resources/cff_v1.2.0.json +1827 -0
  26. commonmeta/resources/commonmeta_v0.12.json +601 -0
  27. commonmeta/resources/commonmeta_v0.13.json +559 -0
  28. commonmeta/resources/commonmeta_v0.14.json +573 -0
  29. commonmeta/resources/crossref/AccessIndicators.xsd +47 -0
  30. commonmeta/resources/crossref/JATS-journalpublishing1-3d2-mathml3-elements.xsd +10130 -0
  31. commonmeta/resources/crossref/JATS-journalpublishing1-3d2-mathml3.xsd +48 -0
  32. commonmeta/resources/crossref/JATS-journalpublishing1-elements.xsd +8705 -0
  33. commonmeta/resources/crossref/JATS-journalpublishing1-mathml3-elements.xsd +8608 -0
  34. commonmeta/resources/crossref/JATS-journalpublishing1-mathml3.xsd +49 -0
  35. commonmeta/resources/crossref/JATS-journalpublishing1.xsd +6176 -0
  36. commonmeta/resources/crossref/clinicaltrials.xsd +61 -0
  37. commonmeta/resources/crossref/common5.3.1.xsd +1538 -0
  38. commonmeta/resources/crossref/crossref5.3.1.xsd +1949 -0
  39. commonmeta/resources/crossref/crossref_query_output3.0.xsd +1097 -0
  40. commonmeta/resources/crossref/fundref.xsd +49 -0
  41. commonmeta/resources/crossref/module-ali.xsd +39 -0
  42. commonmeta/resources/crossref/relations.xsd +444 -0
  43. commonmeta/resources/crossref-v0.2.json +60 -0
  44. commonmeta/resources/csl-data.json +538 -0
  45. commonmeta/resources/datacite-v4.5.json +829 -0
  46. commonmeta/resources/datacite-v4.5pr.json +608 -0
  47. commonmeta/resources/ietf-bcp-47.json +3025 -0
  48. commonmeta/resources/iso-8601.json +3182 -0
  49. commonmeta/resources/spdx/licenses.json +4851 -0
  50. commonmeta/resources/spdx-schema..json +903 -0
  51. commonmeta/resources/styles/apa.csl +1697 -0
  52. commonmeta/resources/styles/chicago-author-date.csl +684 -0
  53. commonmeta/resources/styles/harvard-cite-them-right.csl +321 -0
  54. commonmeta/resources/styles/ieee.csl +468 -0
  55. commonmeta/resources/styles/modern-language-association.csl +341 -0
  56. commonmeta/resources/styles/vancouver.csl +376 -0
  57. commonmeta/schema_utils.py +27 -0
  58. commonmeta/translators.py +47 -0
  59. commonmeta/utils.py +1108 -0
  60. commonmeta/writers/__init__.py +1 -0
  61. commonmeta/writers/bibtex_writer.py +149 -0
  62. commonmeta/writers/citation_writer.py +70 -0
  63. commonmeta/writers/commonmeta_writer.py +68 -0
  64. commonmeta/writers/crossref_xml_writer.py +17 -0
  65. commonmeta/writers/csl_writer.py +79 -0
  66. commonmeta/writers/datacite_writer.py +193 -0
  67. commonmeta/writers/inveniordm_writer.py +94 -0
  68. commonmeta/writers/ris_writer.py +58 -0
  69. commonmeta/writers/schema_org_writer.py +146 -0
  70. {commonmeta_py-0.23.dist-info → commonmeta_py-0.25.dist-info}/METADATA +56 -45
  71. commonmeta_py-0.25.dist-info/RECORD +75 -0
  72. {commonmeta_py-0.23.dist-info → commonmeta_py-0.25.dist-info}/WHEEL +1 -1
  73. commonmeta_py-0.25.dist-info/entry_points.txt +3 -0
  74. commonmeta_py-0.23.dist-info/RECORD +0 -5
  75. /commonmeta_py/__init__.py → /commonmeta/readers/bibtex_reader.py +0 -0
  76. {commonmeta_py-0.23.dist-info/licenses → commonmeta_py-0.25.dist-info}/LICENSE +0 -0
commonmeta/cli.py ADDED
@@ -0,0 +1,200 @@
1
+ import click
2
+ import time
3
+ import pydash as py_
4
+ import orjson as json
5
+
6
+ from commonmeta import Metadata, MetadataList # __version__
7
+ from commonmeta.api_utils import update_ghost_post_via_api
8
+ from commonmeta.doi_utils import validate_prefix
9
+ from commonmeta.utils import encode_doi, decode_doi
10
+ from commonmeta.readers.json_feed_reader import (
11
+ get_json_feed_item_uuid,
12
+ )
13
+ from commonmeta.readers.crossref_reader import get_random_crossref_id
14
+ from commonmeta.readers.datacite_reader import get_random_datacite_id
15
+
16
+
17
+ @click.group()
18
+ @click.option("--show-errors", default=False)
19
+ def cli(show_errors):
20
+ if show_errors:
21
+ click.echo("Show errors mode is on")
22
+
23
+
24
+ @cli.command()
25
+ @click.argument("input", type=str, required=True)
26
+ @click.option("--via", "-f", type=str, default=None)
27
+ @click.option("--to", "-t", type=str, default="commonmeta")
28
+ @click.option("--style", "-s", type=str, default="apa")
29
+ @click.option("--locale", "-l", type=str, default="en-US")
30
+ @click.option("--doi", type=str)
31
+ @click.option("--prefix", type=str)
32
+ @click.option("--depositor", type=str)
33
+ @click.option("--email", type=str)
34
+ @click.option("--registrant", type=str)
35
+ @click.option("--show-errors/--no-errors", type=bool, show_default=True, default=False)
36
+ def convert(
37
+ input,
38
+ via,
39
+ to,
40
+ style,
41
+ locale,
42
+ doi,
43
+ prefix,
44
+ depositor,
45
+ email,
46
+ registrant,
47
+ show_errors,
48
+ ):
49
+ metadata = Metadata(input, via=via, doi=doi, prefix=prefix)
50
+ if show_errors and not metadata.is_valid:
51
+ raise click.ClickException(str(metadata.errors) + str(metadata.write_errors))
52
+
53
+ click.echo(
54
+ metadata.write(
55
+ to=to,
56
+ style=style,
57
+ locale=locale,
58
+ depositor=depositor,
59
+ email=email,
60
+ registrant=registrant,
61
+ )
62
+ )
63
+ if show_errors and metadata.write_errors:
64
+ raise click.ClickException(str(metadata.write_errors))
65
+
66
+
67
+ @cli.command()
68
+ @click.argument("string", type=str, required=True)
69
+ @click.option("--via", "-f", type=str)
70
+ @click.option("--to", "-t", type=str, default="commonmeta")
71
+ @click.option("--style", "-s", type=str, default="apa")
72
+ @click.option("--locale", "-l", type=str, default="en-US")
73
+ @click.option("--prefix", type=str)
74
+ @click.option("--depositor", type=str)
75
+ @click.option("--email", type=str)
76
+ @click.option("--registrant", type=str)
77
+ @click.option("--filename", type=str)
78
+ @click.option("--jsonlines/--no-jsonlines", type=bool, show_default=True, default=False)
79
+ @click.option("--show-errors/--no-errors", type=bool, show_default=True, default=False)
80
+ @click.option("--show-timer/--no-timer", type=bool, show_default=True, default=False)
81
+ def list(
82
+ string,
83
+ via,
84
+ to,
85
+ style,
86
+ locale,
87
+ prefix,
88
+ depositor,
89
+ email,
90
+ registrant,
91
+ filename,
92
+ jsonlines,
93
+ show_errors,
94
+ show_timer,
95
+ ):
96
+ start = time.time()
97
+ metadata_list = MetadataList(
98
+ string,
99
+ via=via,
100
+ depositor=depositor,
101
+ email=email,
102
+ registrant=registrant,
103
+ prefix=prefix,
104
+ filename=filename,
105
+ jsonlines=jsonlines,
106
+ )
107
+ end = time.time()
108
+ runtime = end - start
109
+ if show_errors and not metadata_list.is_valid:
110
+ raise click.ClickException(str(metadata_list.errors))
111
+ click.echo(metadata_list.write(to=to, style=style, locale=locale))
112
+ if show_errors and len(metadata_list.write_errors) > 0:
113
+ raise click.ClickException(str(metadata_list.write_errors))
114
+ if show_timer:
115
+ click.echo(f"Runtime: {runtime:.2f} seconds")
116
+
117
+
118
+ @cli.command()
119
+ @click.option("--provider", type=str, default="crossref")
120
+ @click.option("--prefix", type=str)
121
+ @click.option("--type", type=str)
122
+ @click.option("--number", "-n", type=int, default=1)
123
+ @click.option("--to", "-t", type=str, default="commonmeta")
124
+ @click.option("--style", "-s", type=str, default="apa")
125
+ @click.option("--locale", "-l", type=str, default="en-US")
126
+ @click.option("--show-errors/--no-errors", type=bool, show_default=True, default=False)
127
+ def sample(provider, prefix, type, number, to, style, locale, show_errors):
128
+ if provider == "crossref":
129
+ string = json.dumps(
130
+ {"items": get_random_crossref_id(number, prefix=prefix, _type=type)}
131
+ )
132
+ elif provider == "datacite":
133
+ string = json.dumps({"items": get_random_datacite_id(number)})
134
+ else:
135
+ output = "Provider not supported. Use 'crossref' or 'datacite' instead."
136
+ click.echo(output)
137
+ lst = MetadataList(
138
+ string,
139
+ via=provider,
140
+ style=style,
141
+ locale=locale,
142
+ )
143
+ for item in lst.items:
144
+ output = item.write(to=to)
145
+ if show_errors and not item.is_valid:
146
+ message = f"{item}: {item.errors}"
147
+ raise click.ClickException(message)
148
+ click.echo(output)
149
+
150
+
151
+ @cli.command()
152
+ @click.argument("prefix", type=str, required=True)
153
+ def encode(prefix):
154
+ if validate_prefix(prefix) is None:
155
+ return None
156
+ output = encode_doi(prefix)
157
+ click.echo(output)
158
+
159
+
160
+ @cli.command()
161
+ @click.argument("doi", type=str, required=True)
162
+ def decode(doi):
163
+ output = decode_doi(doi)
164
+ click.echo(output)
165
+
166
+
167
+ @cli.command()
168
+ @click.argument("id", type=str, required=True)
169
+ def encode_by_id(id):
170
+ post = get_json_feed_item_uuid(id)
171
+ prefix = py_.get(post, "blog.prefix")
172
+ if validate_prefix(prefix) is None:
173
+ return None
174
+ output = encode_doi(prefix)
175
+ click.echo(output)
176
+
177
+
178
+ @cli.command()
179
+ @click.argument("filter", type=str, required=True, default="unregistered")
180
+ @click.option("--id", type=str)
181
+ def json_feed(filter, id=None):
182
+ if filter == "blog_slug" and id is not None:
183
+ post = get_json_feed_item_uuid(id)
184
+ output = py_.get(post, "blog.slug", "no slug found")
185
+ else:
186
+ output = "no filter specified"
187
+ click.echo(output)
188
+
189
+
190
+ @cli.command()
191
+ @click.argument("id", type=str, required=True)
192
+ @click.option("--api-key", "-k", type=str, required=True)
193
+ @click.option("--api-url", "-u", type=str, required=True)
194
+ def update_ghost_post(id, api_key, api_url):
195
+ output = update_ghost_post_via_api(id, api_key, api_url)
196
+ click.echo(output)
197
+
198
+
199
+ if __name__ == "__main__":
200
+ cli()