Compare commits

..

2 Commits

  1. 25
      C++/SplitClassFiles/custom.cpp
  2. 15
      C++/SplitClassFiles/custom.h
  3. 22
      C++/SplitClassFiles/custom_user.cpp
  4. 28
      Python/Creating_Documentation/PydocMarkdownDocumentationCreation.md
  5. 15
      Python/Creating_Documentation/pydoc_markdown.md
  6. 9
      Python/datetime_filenames/Python_datetime_string_conversion.md
  7. 31
      Python/datetime_filenames/chronological_backup.py
  8. 9
      Python/logging/log1.py
  9. 10
      Python/logging/log2.py
  10. 16
      Python/logging/main.py
  11. 30
      Python/logging/test.log
  12. 3
      Python/misc/complete_path_to_source.py
  13. BIN
      Python/sqliteImages/imagetest.db
  14. 32
      Python/sqliteImages/sqliteImages.py
  15. BIN
      Python/sqliteImages/test-pattern.png
  16. BIN
      Python/sqliteImages/test-pattern_converted.jpg

25
C++/SplitClassFiles/custom.cpp

@ -0,0 +1,25 @@
#include <iostream>
#include <string>
#include "custom.h"
proto::proto(std::string cname)
{
std::cout<< "FFFFUUUUU" <<std::endl;
}
void proto::setname(std::string bname)
{
name = bname;
}
std::string proto::getname()
{
return name;
}
proto::~proto(){
std::cout << "I am destroyed" << std::endl;
}
//g++ custom_user.cpp custom.cpp -o custom

15
C++/SplitClassFiles/custom.h

@ -0,0 +1,15 @@
#ifndef STUPID_H
#define STUPID_H
class proto{
public:
proto(std::string cname);
//proto();
void setname(std::string bname);
std::string getname();
~proto();
private:
std::string name;
};
#endif

22
C++/SplitClassFiles/custom_user.cpp

@ -0,0 +1,22 @@
#include <iostream>
#include <string>
#include "custom.h"
#include <unistd.h>
//for sleepings
unsigned int microsec;
int main(){
proto obj("WTF");
std::cout<< obj.getname() << std::endl;
obj.setname("Paul Lesack");
std::cout << obj.getname() <<std::endl;
microsec=100*1000;
usleep(microsec);
for (int x=1; x<10; x++)
{
std::cout << "Sleeping" << std::endl;
}
return 0;
}

28
Python/Creating_Documentation/PydocMarkdownDocumentationCreation.md

@ -0,0 +1,28 @@
## Documentation
A good example of a user guide is here: <https://pydataverse.readthedocs.io/en/latest/developer.html>
### Pydoc-markdown
This option gives control over the order in which things are arranged in the API document:
`pydoc-markdown -I ./ -m dryad2dataverse -m dryad2dataverse.constants -m dryad2dataverse.serializer -m dryad2dataverse.transfer -m dryad2dataverse.monitor -m dryad2dataverse.exceptions --render-toc > api_reference.md`
or, after it's installed (with pip -e ./)
`pydoc-markdown -p dryad2dataverse > api_reference.md`
or
`pydoc-markdown -p dryad2dataverse --render-toc > api_reference.md`
Edit manually as required (but hopefully not)
Write the `_config.yml` and `pydoc-markdown.yml` manually
HTML hierarchies are automatically created with a top level heading (`#`) and subheadings.
In the case of pydoc markdown, it's useful to create the docmentation as above, and then add an extra (`#`) to the headings. Then add a heading for the entire page. This is because each source file will create its own `<h1>` tag.
If local, you can switch to the top dir and run `mkdocs serve`, and/or automatically create github pages by using `mkdocs gh-deploy`. See <https://www.mkdocs.org/user-guide/deploying-your-docs/>

15
Python/Creating_Documentation/pydoc_markdown.md

@ -0,0 +1,15 @@
## Notes on creating documentation
Use pydoc-markdown:
<https://pypi.org/project/pydoc-markdown/>
`pydoc-markdown -p dryad2dataverse --render-toc > outputfile.md`
Note the `-p` switch for loading a package instead of a single module (ie, `-m`)
Can be used with mkdocs to produce JustTheDocs format static pages:
<https://www.mkdocs.org/>

9
Python/datetime_filenames/Python_datetime_string_conversion.md

@ -0,0 +1,9 @@
# Python time conversions
x = datetime.datetime.now()
x.strftime('%Y-%m-%d %H:%M:%S')
'2021-11-30 08:11:51'
String to datetime: datetime.strptime
z=datetime.strptime(y, '%Y-%m-%d %H:%M:%S') #python 3.8 + dammit
datetime.datetime(*(time.strptime(y, '%Y-%m-%d %H:%M:%S')[0:6]))#painful

31
Python/datetime_filenames/chronological_backup.py

@ -0,0 +1,31 @@
'''
Chronological file backup example
'''
import datetime
import time
#to generate a date:
#x=datetime.datetime.now().strftime('%Y-%m-%d')
#Sample dates
DATES = ['2021-01-07', '2021-02-14', '2021-06-22',
'2021-04-14', '2021-03-19', '2021-07-11', '2021-05-14']
#sample file names
FNAMES = ['SP_dryad_production.sqlite3.'+ x for x in DATES]
#Note: min max etc work on dictionary keys
#datetime.datetime(*(time.strptime(y, '%Y-%m-%d %H:%M:%S')[0:6]))#painful
#see https://python.readthedocs.io/en/latest/library/datetime.html
FNAME_D={datetime.datetime(
*(time.strptime(dat[-10:],'%Y-%m-%d')[0:6])): dat
for dat in FNAMES}
TIMES = list(FNAME_D)
TIMES.sort()
#There can be only 3
for fil in TIMES[3:]:
print(f'os.remove({FNAME_D[fil]})')
del FNAMES[FNAMES.index(FNAME_D[fil])]
print(FNAMES)

9
Python/logging/log1.py

@ -0,0 +1,9 @@
import logging
logger = logging.getLogger(__name__)
def test1():
logger.info('Ran log1.py test1()')
return 1

10
Python/logging/log2.py

@ -0,0 +1,10 @@
import logging
logger = logging.getLogger(__name__)
def test2():
logger.info('Ran log2.py test2()')
return 1

16
Python/logging/main.py

@ -0,0 +1,16 @@
import logging
import log1
import log2
# See also https://python101.pythonlibrary.org/chapter15_logging.html
logger = logging.getLogger(__name__)
logging.basicConfig(format='%(module)s - %(name)s - %(asctime)s -'
' %(funcName)s - %(message)s', filename='test.log', filemode='w', level=logging.INFO)
#logging.basicConfig(filename='test.log', filemode='w', level=logging.INFO)
for i in range(10):
logger.info(f'called {i} times')
log1.test1()
log2.test2()

30
Python/logging/test.log

@ -0,0 +1,30 @@
main - __main__ - 2021-01-08 13:30:10,622 - <module> - called 0 times
log1 - log1 - 2021-01-08 13:30:10,622 - test1 - Ran log1.py test1()
log2 - log2 - 2021-01-08 13:30:10,622 - test2 - Ran log2.py test2()
main - __main__ - 2021-01-08 13:30:10,622 - <module> - called 1 times
log1 - log1 - 2021-01-08 13:30:10,622 - test1 - Ran log1.py test1()
log2 - log2 - 2021-01-08 13:30:10,622 - test2 - Ran log2.py test2()
main - __main__ - 2021-01-08 13:30:10,622 - <module> - called 2 times
log1 - log1 - 2021-01-08 13:30:10,622 - test1 - Ran log1.py test1()
log2 - log2 - 2021-01-08 13:30:10,622 - test2 - Ran log2.py test2()
main - __main__ - 2021-01-08 13:30:10,622 - <module> - called 3 times
log1 - log1 - 2021-01-08 13:30:10,622 - test1 - Ran log1.py test1()
log2 - log2 - 2021-01-08 13:30:10,622 - test2 - Ran log2.py test2()
main - __main__ - 2021-01-08 13:30:10,622 - <module> - called 4 times
log1 - log1 - 2021-01-08 13:30:10,623 - test1 - Ran log1.py test1()
log2 - log2 - 2021-01-08 13:30:10,623 - test2 - Ran log2.py test2()
main - __main__ - 2021-01-08 13:30:10,623 - <module> - called 5 times
log1 - log1 - 2021-01-08 13:30:10,623 - test1 - Ran log1.py test1()
log2 - log2 - 2021-01-08 13:30:10,623 - test2 - Ran log2.py test2()
main - __main__ - 2021-01-08 13:30:10,623 - <module> - called 6 times
log1 - log1 - 2021-01-08 13:30:10,623 - test1 - Ran log1.py test1()
log2 - log2 - 2021-01-08 13:30:10,623 - test2 - Ran log2.py test2()
main - __main__ - 2021-01-08 13:30:10,623 - <module> - called 7 times
log1 - log1 - 2021-01-08 13:30:10,623 - test1 - Ran log1.py test1()
log2 - log2 - 2021-01-08 13:30:10,623 - test2 - Ran log2.py test2()
main - __main__ - 2021-01-08 13:30:10,623 - <module> - called 8 times
log1 - log1 - 2021-01-08 13:30:10,623 - test1 - Ran log1.py test1()
log2 - log2 - 2021-01-08 13:30:10,623 - test2 - Ran log2.py test2()
main - __main__ - 2021-01-08 13:30:10,623 - <module> - called 9 times
log1 - log1 - 2021-01-08 13:30:10,623 - test1 - Ran log1.py test1()
log2 - log2 - 2021-01-08 13:30:10,623 - test2 - Ran log2.py test2()

3
Python/misc/complete_path_to_source.py

@ -0,0 +1,3 @@
#Find complete path to a python file:
dir_path = os.path.dirname(os.path.realpath(__file__))

BIN
Python/sqliteImages/imagetest.db

Binary file not shown.

32
Python/sqliteImages/sqliteImages.py

@ -0,0 +1,32 @@
'''Images to and from sqlite'''
import io, sqlite3
from PIL import Image
#How to open a PIL image from a photostream
with open('test-pattern.png', 'rb') as x:
foto = x.read()
fotostream = io.BytesIO(foto)
image = Image.open(fotostream)
#And now for sqlite3
conn = sqlite3.Connection('imagetest.db')
cursor = conn.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS images ("name" TEXT, "file" BLOB);')
#make sure you insert the bytes from foto, not the io object
cursor.execute('INSERT INTO images VALUES (?,?)', ('testimage', foto))
#retrieval
cursor.execute('SELECT file from images')
f2stream = io.BytesIO(cursor.fetchone()[0]) #fetchone returns a tuple
f2img = Image.open(f2stream)
f2img = f2img.convert('RGB') # original is RGBA and generates an error
#see https://github.com/python-pillow/Pillow/issues/2609
f2img.save('test-pattern_converted.jpg')
#and save that data
conn.commit()
conn.close()

BIN
Python/sqliteImages/test-pattern.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
Python/sqliteImages/test-pattern_converted.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Loading…
Cancel
Save