mirror of
https://github.com/Garmelon/PFERD.git
synced 2023-12-21 10:23:01 +01:00
Initial commit
This commit is contained in:
commit
0803f196c8
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
bin/
|
||||
include/
|
||||
lib/
|
||||
lib64
|
||||
pip-selfcheck.json
|
||||
pyvenv.cfg
|
87
plan.md
Normal file
87
plan.md
Normal file
@ -0,0 +1,87 @@
|
||||
# Config
|
||||
|
||||
- python script as config
|
||||
- imports PFERD as library
|
||||
- operates relative to its own path
|
||||
|
||||
## Example folder structure
|
||||
|
||||
```
|
||||
.../
|
||||
Vorlesungen/
|
||||
PFERD/ as symlink, locally or in python's import path
|
||||
PFERDconf.py does things relative to its own location (hopefully)
|
||||
GBI/ folder to synchronize files into
|
||||
...
|
||||
Prog/ folder to synchronize files into
|
||||
...
|
||||
```
|
||||
|
||||
## Example config
|
||||
|
||||
```python
|
||||
import PFERD
|
||||
|
||||
def gbi_filter(ilias_path):
|
||||
... # rename and move files, or filter them
|
||||
return local_path # or None if file should be ignored
|
||||
|
||||
kit = PFERD.KIT()
|
||||
kit.synchronize("crs_855240", "GBI", filter=gbi_filter)
|
||||
kit.synchronize("crs_851237", "Prog") # default filter preserves paths
|
||||
```
|
||||
|
||||
# Structure
|
||||
|
||||
## Things that need to be done
|
||||
|
||||
- figure out where config file is located
|
||||
- get and store shibboleth session cookie
|
||||
- get and store ilias session cookie
|
||||
- download specific ilias urls (mostly goto.php, probably)
|
||||
- parse web page
|
||||
- determine if logging in is necessary
|
||||
- authenticate if necessary
|
||||
- don't re-login if shibboleth session cookie is still valid
|
||||
- find folders in current folder
|
||||
- find files to download in current folder
|
||||
- ignore LA1 test thingy
|
||||
- crawl folders and create directory-like structure/file paths
|
||||
- use filter function for paths
|
||||
- download files to local file paths
|
||||
- create folders as necessary
|
||||
- remember downloaded files
|
||||
- find files that were not previously downloaded
|
||||
- remove un-downloaded files
|
||||
- remove unnecessary folders (prompt user before deleting!)
|
||||
- logging
|
||||
- display crawl progress
|
||||
- display structure of found files using neat box drawing characters
|
||||
- display download progress
|
||||
|
||||
## How those things are usually done
|
||||
|
||||
Step 3. to 5. are run for each synchronize() call.
|
||||
|
||||
1. launch script
|
||||
- load cookie files
|
||||
2. authenticate
|
||||
(assuming enough time has passed for the session cookies to become invalid)
|
||||
- prompt user for username
|
||||
- prompt user for password (no echo)
|
||||
- somehow obtain valid session cookies
|
||||
3. crawl
|
||||
- start at the id specified in synchronize() args
|
||||
- search for folders and files to download
|
||||
- build directory structure
|
||||
4. download
|
||||
- run each path through filter function
|
||||
- if file was not filtered:
|
||||
- download file and save result to filtered path
|
||||
- use sync directory specified in synchronize() args
|
||||
- remember the filtered path for later
|
||||
5. cleanup
|
||||
- search sync directory for files
|
||||
- for each file not previously downloaded:
|
||||
- prompt user if they want to delete the file (default: No)
|
||||
- delete file if user answered Yes
|
8
requirements.txt
Normal file
8
requirements.txt
Normal file
@ -0,0 +1,8 @@
|
||||
aiohttp==3.4.4
|
||||
async-timeout==3.0.1
|
||||
attrs==18.2.0
|
||||
beautifulsoup4==4.6.3
|
||||
chardet==3.0.4
|
||||
idna==2.7
|
||||
multidict==4.4.2
|
||||
yarl==1.2.6
|
Loading…
Reference in New Issue
Block a user