HPI/demo.py
Dima Gerasimov 64a4782f0e core/ci: fix windows-specific issues
- use portable separators
- paths should be prepended with r' (so backwards slash isn't treated as escaping)
- sqlite connections should be closed (otherwise windows fails to remove the underlying db file)
- workaround for emojis via PYTHONUTF8=1 test for now
- make ZipPath portable
- properly use tox python environment everywhere

  this was causing issues on Windows
  e.g.
      WARNING: test command found but not installed in testenv
        cmd: C:\hostedtoolcache\windows\Python\3.9.12\x64\python3.EXE
2022-05-03 10:16:01 +01:00

130 lines
3.9 KiB
Python
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
from subprocess import check_call, DEVNULL
from shutil import copy, copytree
import os
from os.path import abspath
from sys import executable as python
from pathlib import Path
my_repo = Path(__file__).absolute().parent
def run():
# uses fixed paths; worth it for the sake of demonstration
# assumes we're in /tmp/my_demo now
# 1. clone git@github.com:karlicoss/my.git
copytree(my_repo, 'my_repo', symlinks=True)
# 2. prepare repositories you'd be using. For this demo we only set up Hypothesis
tox = 'TOX' in os.environ
if tox: # tox doesn't like --user flag
check_call(f'{python} -m pip install git+https://github.com/karlicoss/hypexport.git'.split())
else:
try:
import hypexport
except ModuleNotFoundError:
check_call(f'{python} -m pip --user git+https://github.com/karlicoss/hypexport.git'.split())
# 3. prepare some demo Hypothesis data
hypothesis_backups = abspath('backups/hypothesis')
Path(hypothesis_backups).mkdir(exist_ok=True, parents=True)
check_call([
'curl',
'https://raw.githubusercontent.com/taniki/netrights-dashboard-mockup/master/_data/annotations.json',
'-o', hypothesis_backups + '/annotations.json',
], stderr=DEVNULL)
#
# 4. point my.config to the Hypothesis data
mycfg_root = abspath('my_repo')
init_file = Path(mycfg_root) / 'my/config.py'
init_file.write_text(init_file.read_text().replace(
'/path/to/hypothesis/data',
hypothesis_backups,
))
#
# 4. now we can use it!
os.chdir(my_repo)
check_call([python, '-c', '''
import my.hypothesis
pages = my.hypothesis.pages()
from itertools import islice
for page in islice(pages, 0, 8):
print('URL: ' + page.url)
print('Title: ' + page.title)
print('{} annotations'.format(len(page.highlights)))
print()
'''], env={
# this is just to prevent demo.py from using real data
# normally, it will rely on having my.config in ~/.config/my
'MY_CONFIG': mycfg_root,
**os.environ,
})
# that should result in something like this:
# URL: https://tacticaltech.org/
# Title: Tactical Technology Collective
# 1 annotations
#
# URL: https://web.hypothes.is/blog/annotating-the-wild-west-of-information-flow/
# Title: Annotating the wild west of information flow Hypothesis
# 1 annotations
#
# URL: http://www.liberation.fr/futurs/2016/12/12/megafichier-beauvau-prie-de-revoir-sa-copie_1534720
# Title: «Mégafichier» : Beauvau prié de revoir sa copie
# 3 annotations
#
# URL: https://www.wired.com/2016/12/7500-faceless-coders-paid-bitcoin-built-hedge-funds-brain/
# Title: 7,500 Faceless Coders Paid in Bitcoin Built a Hedge Funds Brain
# 4 annotations
#
# URL: http://realscreen.com/2016/12/06/project-x-tough-among-sundance-17-doc-shorts/
# Title: “Project X,” “Tough” among Sundance 17 doc shorts
# 1 annotations
#
# URL: https://grehack.fr/2016/program
# Title: GreHack | Security conference and hacking game 2016 | Grenoble
# 1 annotations
#
# URL: https://respectmynet.eu/
# Title: [!] Respect My Net
# 1 annotations
#
# URL: https://www.youtube.com/watch?v=Xgp7BIBtPhk
# Title: BBC Documentaries 2016: The Joy of Data [FULL BBC SCIENCE DOCUMENTARY]
# 1 annotations
from contextlib import contextmanager
@contextmanager
def named_temp_dir(name: str):
"""
Fixed name tmp dir
"""
import tempfile
td = Path(tempfile.gettempdir()) / name
try:
td.mkdir(exist_ok=False)
yield td
finally:
import os, shutil
skip_cleanup = 'CI' in os.environ and os.name == 'nt'
# TODO hmm for some reason cleanup on windows causes AccessError
if not skip_cleanup:
shutil.rmtree(str(td))
def main():
with named_temp_dir('my_demo') as tdir:
os.chdir(tdir)
run()
if __name__ == '__main__':
main()