pyLodStorage 0.0.72__tar.gz → 0.0.74__tar.gz

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 (29) hide show
  1. pylodstorage-0.0.74/PKG-INFO +72 -0
  2. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/entity.py +5 -5
  3. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/query.py +7 -6
  4. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/sparql.py +6 -6
  5. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/sql.py +3 -2
  6. pylodstorage-0.0.74/pylodstorage.egg-info/PKG-INFO +72 -0
  7. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/setup.py +1 -1
  8. pylodstorage-0.0.72/PKG-INFO +0 -69
  9. pylodstorage-0.0.72/pylodstorage.egg-info/PKG-INFO +0 -69
  10. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/LICENSE +0 -0
  11. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/README.md +0 -0
  12. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/__init__.py +0 -0
  13. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/csv.py +0 -0
  14. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/jsonable.py +0 -0
  15. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/jsonpicklemixin.py +0 -0
  16. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/lod.py +0 -0
  17. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/mwTable.py +0 -0
  18. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/plot.py +0 -0
  19. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/sample.py +0 -0
  20. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/schema.py +0 -0
  21. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/storageconfig.py +0 -0
  22. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/tabulateCounter.py +0 -0
  23. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/uml.py +0 -0
  24. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/lodstorage/yamlablemixin.py +0 -0
  25. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/pylodstorage.egg-info/SOURCES.txt +0 -0
  26. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/pylodstorage.egg-info/dependency_links.txt +0 -0
  27. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/pylodstorage.egg-info/requires.txt +0 -0
  28. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/pylodstorage.egg-info/top_level.txt +0 -0
  29. {pylodstorage-0.0.72 → pylodstorage-0.0.74}/setup.cfg +0 -0
@@ -0,0 +1,72 @@
1
+ Metadata-Version: 2.1
2
+ Name: pylodstorage
3
+ Version: 0.0.74
4
+ Summary: python List of Dict (Table) Storage library
5
+ Home-page: https://github.com/WolfgangFahl/pyLodStorage
6
+ Author: Wolfgang Fahl
7
+ Author-email: wf@bitplan.com
8
+ Maintainer: Wolfgang Fahl
9
+ License: Apache License
10
+ Project-URL: Documentation, http://wiki.bitplan.com/index.php/PyLoDStorage
11
+ Project-URL: Code, https://github.com/WolfgangFahl/pyLoDStorage/blob/master/lodstorage/sql.py
12
+ Project-URL: Issue tracker, https://github.com/WolfgangFahl/pyLodStorage/issues
13
+ Platform: UNKNOWN
14
+ Classifier: Programming Language :: Python
15
+ Classifier: Programming Language :: Python :: 3.6
16
+ Classifier: Programming Language :: Python :: 3.7
17
+ Classifier: Programming Language :: Python :: 3.8
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+
22
+ # pyLoDStorage
23
+ python List of Dict (Table) Storage library
24
+
25
+ [![Documentation Status](https://readthedocs.org/projects/pylodstorage/badge/?version=latest)](https://pylodstorage.readthedocs.io/en/latest/?badge=latest)
26
+ [![pypi](https://img.shields.io/pypi/pyversions/pyLoDStorage)](https://pypi.org/project/pyLoDStorage/)
27
+ [![Github Actions Build](https://github.com/WolfgangFahl/pyLoDStorage/workflows/Build/badge.svg?branch=master)](https://github.com/WolfgangFahl/pyLoDStorage/actions?query=workflow%3ABuild+branch%3Amaster)
28
+ [![PyPI Status](https://img.shields.io/pypi/v/pyLoDStorage.svg)](https://pypi.python.org/pypi/pyLoDStorage/)
29
+ [![Downloads](https://pepy.tech/badge/pyLoDStorage)](https://pepy.tech/project/pyLoDStorage)
30
+ [![GitHub issues](https://img.shields.io/github/issues/WolfgangFahl/pyLoDStorage.svg)](https://github.com/WolfgangFahl/pyLoDStorage/issues)
31
+ [![GitHub closed issues](https://img.shields.io/github/issues-closed/WolfgangFahl/pyLoDStorage.svg)](https://github.com/WolfgangFahl/pyLoDStorage/issues/?q=is%3Aissue+is%3Aclosed)
32
+ [![License](https://img.shields.io/github/license/WolfgangFahl/pyLoDStorage.svg)](https://www.apache.org/licenses/LICENSE-2.0)
33
+
34
+ What it is
35
+ ==========
36
+ pyLoDStorage allows to store table like data (List of Dicts) via
37
+
38
+ - Sqlite3
39
+ - JSON
40
+ - SPARQL
41
+
42
+ Installation
43
+ ============
44
+ ```bash
45
+ pip install pylodstorage
46
+ ```
47
+
48
+ Get Sources
49
+ ===========
50
+ ```bash
51
+ git clone https://github.com/WolfgangFahl/pyLoDStorage
52
+ cd pyLodStorage
53
+ scripts/install
54
+ ```
55
+
56
+ Testing
57
+ =======
58
+ ```bash
59
+ scripts/test
60
+ ```
61
+
62
+ Usage
63
+ =====
64
+ see [test cases](https://github.com/WolfgangFahl/pyLoDStorage/tree/master/tests)
65
+
66
+ ## Documentation
67
+ [Wiki](http://wiki.bitplan.com/index.php/PyLoDStorage)
68
+
69
+ ### Authors
70
+ * [Wolfgang Fahl](http://www.bitplan.com/Wolfgang_Fahl)
71
+
72
+
@@ -305,12 +305,12 @@ SELECT ?eventId ?acronym ?series ?title ?year ?country ?city ?startDate ?endDate
305
305
  pass
306
306
  elif mode is StoreMode.SPARQL:
307
307
  startTime=time.time()
308
- # @ FIXME make abstract
309
- self.showProgress ("storing %d events for %s to %s" % (len(self.events),self.name,self.mode))
308
+ msg=f"storing {len(listOfDicts)} {self.entityPluralName} to {self.config.mode} ({self.config.endpoint})"
309
+ self.showProgress (msg)
310
+ # @ FIXME make abstract /configurable
310
311
  entityType="cr:Event"
311
- prefixes="PREFIX cr: <http://cr.bitplan.com/>"
312
- primaryKey="eventId"
313
- self.sparql.insertListOfDicts(listOfDicts, entityType, primaryKey, prefixes,limit=limit,batchSize=batchSize)
312
+ prefixes=self.config.prefix
313
+ self.sparql.insertListOfDicts(listOfDicts, entityType, self.primaryKey, prefixes,limit=limit,batchSize=batchSize)
314
314
  self.showProgress ("store for %s done after %5.1f secs" % (self.name,time.time()-startTime))
315
315
  elif mode is StoreMode.SQL:
316
316
  startTime=time.time()
@@ -47,7 +47,7 @@ class QueryResultDocumentation():
47
47
  '''
48
48
  text=f"{self.title}\n{self.query.description}\n{self.sourceCodeHeader}\n{self.sourceCode}{self.tryItMarkup}\n{self.resultHeader}\n{self.result}"
49
49
  return text
50
-
50
+
51
51
  class Query(object):
52
52
  ''' a Query e.g. for SPAQRL '''
53
53
 
@@ -120,10 +120,11 @@ class Query(object):
120
120
  value=record[key]
121
121
  if value is not None and isinstance(value,str) and value.startswith(prefix):
122
122
  item=value.replace(prefix,"")
123
+ uqitem=urllib.parse.unquote(item)
123
124
  if tablefmt=="latex":
124
- link=item
125
+ link=uqitem
125
126
  else:
126
- link=self.getLink(value,item,tablefmt)
127
+ link=self.getLink(value,uqitem,tablefmt)
127
128
  record[key]=link
128
129
 
129
130
 
@@ -174,9 +175,9 @@ class Query(object):
174
175
  if withSourceCode:
175
176
  tryItMarkup=self.getLink(tryItUrl, "try it!", tablefmt)
176
177
  if tablefmt=="github":
177
- title=f"**{self.title}**"
178
- sourceCodeHeader="**query**"
179
- resultHeader="**result**"
178
+ title=f"## {self.title}"
179
+ sourceCodeHeader="### query"
180
+ resultHeader="## result"
180
181
  sourceCode=f"""```sql
181
182
  {self.query}
182
183
  ```"""
@@ -175,18 +175,18 @@ class SPARQL(object):
175
175
  if startTime is None:
176
176
  startTime=batchStartTime
177
177
  rdfprefix="PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"
178
- insertCommand='%s%s\nINSERT DATA {\n' % (rdfprefix,prefixes)
178
+ insertCommand=f'{rdfprefix}{prefixes}\nINSERT DATA {{\n'
179
179
  for index,record in enumerate(listOfDicts):
180
180
  if not primaryKey in record:
181
- errors.append("missing primary key %s in record %d" % (primaryKey,index))
181
+ errors.append(f"missing primary key {primaryKey} in record {index}")
182
182
  else:
183
183
  primaryValue=record[primaryKey]
184
184
  if primaryValue is None:
185
- errors.append("primary key %s value is None in record %d" % (primaryKey,index))
185
+ errors.append(f"primary key {primaryKey} value is None in record {index}")
186
186
  else:
187
187
  encodedPrimaryValue=self.getLocalName(primaryValue)
188
- tSubject="%s__%s" %(entityType,encodedPrimaryValue)
189
- insertCommand+=' %s rdf:type "%s".\n' %(tSubject,entityType)
188
+ tSubject=f"{entityType}__{encodedPrimaryValue}"
189
+ insertCommand+=f' {tSubject} rdf:type "{entityType}".\n'
190
190
  for keyValue in record.items():
191
191
  key,value=keyValue
192
192
  # convert key if necessary
@@ -194,7 +194,7 @@ class SPARQL(object):
194
194
  valueType=type(value)
195
195
  if self.debug:
196
196
  print("%s(%s)=%s" % (key,valueType,value))
197
- tPredicate="%s_%s" % (entityType,key)
197
+ tPredicate=f"{entityType}_{key}"
198
198
  tObject=value
199
199
  if valueType == str:
200
200
  escapedString=self.controlEscape(value)
@@ -22,7 +22,7 @@ class SQLDB(object):
22
22
  '''
23
23
  RAM=":memory:"
24
24
 
25
- def __init__(self,dbname:str=':memory:',connection=None,check_same_thread=True,debug=False, errorDebug=False):
25
+ def __init__(self,dbname:str=':memory:',connection=None,check_same_thread=True,timeout=5,debug=False, errorDebug=False):
26
26
  '''
27
27
  Construct me for the given dbname and debug
28
28
 
@@ -31,6 +31,7 @@ class SQLDB(object):
31
31
  dbname(string): name of the database - default is a RAM based database
32
32
  connection(Connection): an optional connection to be reused
33
33
  check_same_thread(boolean): True if object handling needs to be on the same thread see https://stackoverflow.com/a/48234567/1497139
34
+ timeout(float): number of seconds for connection timeout
34
35
  debug(boolean): if True switch on debug
35
36
  errorDebug(boolean): True if debug info should be provided on errors (should not be used for production since it might reveal data)
36
37
  '''
@@ -38,7 +39,7 @@ class SQLDB(object):
38
39
  self.debug=debug
39
40
  self.errorDebug=errorDebug
40
41
  if connection is None:
41
- self.c=sqlite3.connect(dbname,detect_types=sqlite3.PARSE_DECLTYPES,check_same_thread=check_same_thread)
42
+ self.c=sqlite3.connect(dbname,detect_types=sqlite3.PARSE_DECLTYPES,check_same_thread=check_same_thread,timeout=timeout)
42
43
  else:
43
44
  self.c=connection
44
45
 
@@ -0,0 +1,72 @@
1
+ Metadata-Version: 2.1
2
+ Name: pylodstorage
3
+ Version: 0.0.74
4
+ Summary: python List of Dict (Table) Storage library
5
+ Home-page: https://github.com/WolfgangFahl/pyLodStorage
6
+ Author: Wolfgang Fahl
7
+ Author-email: wf@bitplan.com
8
+ Maintainer: Wolfgang Fahl
9
+ License: Apache License
10
+ Project-URL: Documentation, http://wiki.bitplan.com/index.php/PyLoDStorage
11
+ Project-URL: Code, https://github.com/WolfgangFahl/pyLoDStorage/blob/master/lodstorage/sql.py
12
+ Project-URL: Issue tracker, https://github.com/WolfgangFahl/pyLodStorage/issues
13
+ Platform: UNKNOWN
14
+ Classifier: Programming Language :: Python
15
+ Classifier: Programming Language :: Python :: 3.6
16
+ Classifier: Programming Language :: Python :: 3.7
17
+ Classifier: Programming Language :: Python :: 3.8
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+
22
+ # pyLoDStorage
23
+ python List of Dict (Table) Storage library
24
+
25
+ [![Documentation Status](https://readthedocs.org/projects/pylodstorage/badge/?version=latest)](https://pylodstorage.readthedocs.io/en/latest/?badge=latest)
26
+ [![pypi](https://img.shields.io/pypi/pyversions/pyLoDStorage)](https://pypi.org/project/pyLoDStorage/)
27
+ [![Github Actions Build](https://github.com/WolfgangFahl/pyLoDStorage/workflows/Build/badge.svg?branch=master)](https://github.com/WolfgangFahl/pyLoDStorage/actions?query=workflow%3ABuild+branch%3Amaster)
28
+ [![PyPI Status](https://img.shields.io/pypi/v/pyLoDStorage.svg)](https://pypi.python.org/pypi/pyLoDStorage/)
29
+ [![Downloads](https://pepy.tech/badge/pyLoDStorage)](https://pepy.tech/project/pyLoDStorage)
30
+ [![GitHub issues](https://img.shields.io/github/issues/WolfgangFahl/pyLoDStorage.svg)](https://github.com/WolfgangFahl/pyLoDStorage/issues)
31
+ [![GitHub closed issues](https://img.shields.io/github/issues-closed/WolfgangFahl/pyLoDStorage.svg)](https://github.com/WolfgangFahl/pyLoDStorage/issues/?q=is%3Aissue+is%3Aclosed)
32
+ [![License](https://img.shields.io/github/license/WolfgangFahl/pyLoDStorage.svg)](https://www.apache.org/licenses/LICENSE-2.0)
33
+
34
+ What it is
35
+ ==========
36
+ pyLoDStorage allows to store table like data (List of Dicts) via
37
+
38
+ - Sqlite3
39
+ - JSON
40
+ - SPARQL
41
+
42
+ Installation
43
+ ============
44
+ ```bash
45
+ pip install pylodstorage
46
+ ```
47
+
48
+ Get Sources
49
+ ===========
50
+ ```bash
51
+ git clone https://github.com/WolfgangFahl/pyLoDStorage
52
+ cd pyLodStorage
53
+ scripts/install
54
+ ```
55
+
56
+ Testing
57
+ =======
58
+ ```bash
59
+ scripts/test
60
+ ```
61
+
62
+ Usage
63
+ =====
64
+ see [test cases](https://github.com/WolfgangFahl/pyLoDStorage/tree/master/tests)
65
+
66
+ ## Documentation
67
+ [Wiki](http://wiki.bitplan.com/index.php/PyLoDStorage)
68
+
69
+ ### Authors
70
+ * [Wolfgang Fahl](http://www.bitplan.com/Wolfgang_Fahl)
71
+
72
+
@@ -11,7 +11,7 @@ with open(path.join(this_directory, 'README.md'), encoding='utf-8') as f:
11
11
 
12
12
  setup(
13
13
  name='pylodstorage',
14
- version='0.0.72',
14
+ version='0.0.74',
15
15
 
16
16
  packages=['lodstorage',],
17
17
  author='Wolfgang Fahl',
@@ -1,69 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: pylodstorage
3
- Version: 0.0.72
4
- Summary: python List of Dict (Table) Storage library
5
- Home-page: https://github.com/WolfgangFahl/pyLodStorage
6
- Author: Wolfgang Fahl
7
- Author-email: wf@bitplan.com
8
- Maintainer: Wolfgang Fahl
9
- License: Apache License
10
- Project-URL: Documentation, http://wiki.bitplan.com/index.php/PyLoDStorage
11
- Project-URL: Code, https://github.com/WolfgangFahl/pyLoDStorage/blob/master/lodstorage/sql.py
12
- Project-URL: Issue tracker, https://github.com/WolfgangFahl/pyLodStorage/issues
13
- Description: # pyLoDStorage
14
- python List of Dict (Table) Storage library
15
-
16
- [![Documentation Status](https://readthedocs.org/projects/pylodstorage/badge/?version=latest)](https://pylodstorage.readthedocs.io/en/latest/?badge=latest)
17
- [![pypi](https://img.shields.io/pypi/pyversions/pyLoDStorage)](https://pypi.org/project/pyLoDStorage/)
18
- [![Github Actions Build](https://github.com/WolfgangFahl/pyLoDStorage/workflows/Build/badge.svg?branch=master)](https://github.com/WolfgangFahl/pyLoDStorage/actions?query=workflow%3ABuild+branch%3Amaster)
19
- [![PyPI Status](https://img.shields.io/pypi/v/pyLoDStorage.svg)](https://pypi.python.org/pypi/pyLoDStorage/)
20
- [![Downloads](https://pepy.tech/badge/pyLoDStorage)](https://pepy.tech/project/pyLoDStorage)
21
- [![GitHub issues](https://img.shields.io/github/issues/WolfgangFahl/pyLoDStorage.svg)](https://github.com/WolfgangFahl/pyLoDStorage/issues)
22
- [![GitHub closed issues](https://img.shields.io/github/issues-closed/WolfgangFahl/pyLoDStorage.svg)](https://github.com/WolfgangFahl/pyLoDStorage/issues/?q=is%3Aissue+is%3Aclosed)
23
- [![License](https://img.shields.io/github/license/WolfgangFahl/pyLoDStorage.svg)](https://www.apache.org/licenses/LICENSE-2.0)
24
-
25
- What it is
26
- ==========
27
- pyLoDStorage allows to store table like data (List of Dicts) via
28
-
29
- - Sqlite3
30
- - JSON
31
- - SPARQL
32
-
33
- Installation
34
- ============
35
- ```bash
36
- pip install pylodstorage
37
- ```
38
-
39
- Get Sources
40
- ===========
41
- ```bash
42
- git clone https://github.com/WolfgangFahl/pyLoDStorage
43
- cd pyLodStorage
44
- scripts/install
45
- ```
46
-
47
- Testing
48
- =======
49
- ```bash
50
- scripts/test
51
- ```
52
-
53
- Usage
54
- =====
55
- see [test cases](https://github.com/WolfgangFahl/pyLoDStorage/tree/master/tests)
56
-
57
- ## Documentation
58
- [Wiki](http://wiki.bitplan.com/index.php/PyLoDStorage)
59
-
60
- ### Authors
61
- * [Wolfgang Fahl](http://www.bitplan.com/Wolfgang_Fahl)
62
-
63
- Platform: UNKNOWN
64
- Classifier: Programming Language :: Python
65
- Classifier: Programming Language :: Python :: 3.6
66
- Classifier: Programming Language :: Python :: 3.7
67
- Classifier: Programming Language :: Python :: 3.8
68
- Classifier: Programming Language :: Python :: 3.9
69
- Description-Content-Type: text/markdown
@@ -1,69 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: pylodstorage
3
- Version: 0.0.72
4
- Summary: python List of Dict (Table) Storage library
5
- Home-page: https://github.com/WolfgangFahl/pyLodStorage
6
- Author: Wolfgang Fahl
7
- Author-email: wf@bitplan.com
8
- Maintainer: Wolfgang Fahl
9
- License: Apache License
10
- Project-URL: Documentation, http://wiki.bitplan.com/index.php/PyLoDStorage
11
- Project-URL: Code, https://github.com/WolfgangFahl/pyLoDStorage/blob/master/lodstorage/sql.py
12
- Project-URL: Issue tracker, https://github.com/WolfgangFahl/pyLodStorage/issues
13
- Description: # pyLoDStorage
14
- python List of Dict (Table) Storage library
15
-
16
- [![Documentation Status](https://readthedocs.org/projects/pylodstorage/badge/?version=latest)](https://pylodstorage.readthedocs.io/en/latest/?badge=latest)
17
- [![pypi](https://img.shields.io/pypi/pyversions/pyLoDStorage)](https://pypi.org/project/pyLoDStorage/)
18
- [![Github Actions Build](https://github.com/WolfgangFahl/pyLoDStorage/workflows/Build/badge.svg?branch=master)](https://github.com/WolfgangFahl/pyLoDStorage/actions?query=workflow%3ABuild+branch%3Amaster)
19
- [![PyPI Status](https://img.shields.io/pypi/v/pyLoDStorage.svg)](https://pypi.python.org/pypi/pyLoDStorage/)
20
- [![Downloads](https://pepy.tech/badge/pyLoDStorage)](https://pepy.tech/project/pyLoDStorage)
21
- [![GitHub issues](https://img.shields.io/github/issues/WolfgangFahl/pyLoDStorage.svg)](https://github.com/WolfgangFahl/pyLoDStorage/issues)
22
- [![GitHub closed issues](https://img.shields.io/github/issues-closed/WolfgangFahl/pyLoDStorage.svg)](https://github.com/WolfgangFahl/pyLoDStorage/issues/?q=is%3Aissue+is%3Aclosed)
23
- [![License](https://img.shields.io/github/license/WolfgangFahl/pyLoDStorage.svg)](https://www.apache.org/licenses/LICENSE-2.0)
24
-
25
- What it is
26
- ==========
27
- pyLoDStorage allows to store table like data (List of Dicts) via
28
-
29
- - Sqlite3
30
- - JSON
31
- - SPARQL
32
-
33
- Installation
34
- ============
35
- ```bash
36
- pip install pylodstorage
37
- ```
38
-
39
- Get Sources
40
- ===========
41
- ```bash
42
- git clone https://github.com/WolfgangFahl/pyLoDStorage
43
- cd pyLodStorage
44
- scripts/install
45
- ```
46
-
47
- Testing
48
- =======
49
- ```bash
50
- scripts/test
51
- ```
52
-
53
- Usage
54
- =====
55
- see [test cases](https://github.com/WolfgangFahl/pyLoDStorage/tree/master/tests)
56
-
57
- ## Documentation
58
- [Wiki](http://wiki.bitplan.com/index.php/PyLoDStorage)
59
-
60
- ### Authors
61
- * [Wolfgang Fahl](http://www.bitplan.com/Wolfgang_Fahl)
62
-
63
- Platform: UNKNOWN
64
- Classifier: Programming Language :: Python
65
- Classifier: Programming Language :: Python :: 3.6
66
- Classifier: Programming Language :: Python :: 3.7
67
- Classifier: Programming Language :: Python :: 3.8
68
- Classifier: Programming Language :: Python :: 3.9
69
- Description-Content-Type: text/markdown
File without changes
File without changes
File without changes