fixed readme... for reals this time
This commit is contained in:
parent
2075020f25
commit
9a67abbe20
222
README.md
222
README.md
|
@ -1,190 +1,54 @@
|
||||||
from typing import Dict, List, Callable
|
# Filey
|
||||||
from subprocess import run, Popen
|
|
||||||
from pathlib import Path
|
|
||||||
from time import sleep
|
|
||||||
import re, os, platform, sys
|
|
||||||
|
|
||||||
from pyperclip import copy, paste
|
Flexible functions and handy handles for your favourite filey things.
|
||||||
from sl4ng import show, getsource, pop, unzip, main, join, ffplay, regenerator, kill, kbd, convert
|
|
||||||
from filey import Address, Directory, File
|
|
||||||
import sl4ng, filey
|
|
||||||
|
|
||||||
def clear():
|
````python
|
||||||
Popen('clear')
|
# central_nervous_system.py
|
||||||
sleep(.2)
|
import os, random
|
||||||
def cls():
|
|
||||||
clear()
|
|
||||||
show(map(repr, cd), head=False, tail=False)
|
|
||||||
|
|
||||||
architecture = platform.architecture()
|
from filey import Address, Directory, File, Library, ffplay, convert
|
||||||
|
|
||||||
escaped = tuple(i for i in kbd() if re.escape(i)!=i)
|
|
||||||
|
|
||||||
this = __file__
|
this = __file__
|
||||||
here = os.path.dirname(__file__)
|
here = os.path.dirname(__file__)
|
||||||
|
pwd = Address(here).obj
|
||||||
|
|
||||||
|
print(here == str(pwd))
|
||||||
|
print(isinstance(pwd, Directory))
|
||||||
|
|
||||||
|
|
||||||
|
def cd(path):
|
||||||
|
global pwd
|
||||||
|
if isinstance(path, str):
|
||||||
|
os.chdir(path)
|
||||||
|
pwd.path = path
|
||||||
|
elif isinstance(path, Directory):
|
||||||
|
path.enter()
|
||||||
|
pwd.path = path.path
|
||||||
|
else:
|
||||||
|
raise ValueError
|
||||||
|
|
||||||
|
|
||||||
c = Directory('c:/')
|
|
||||||
e = Directory('e:/')
|
|
||||||
f = Directory('f:/')
|
|
||||||
|
|
||||||
cd = Directory('.')
|
|
||||||
user = Directory('~')
|
user = Directory('~')
|
||||||
documents = user/'documents'
|
music = user / "music"
|
||||||
root = c if c.exists else None
|
artist1 = music["Collection/Alix Perez"]
|
||||||
appdata = user/'appdata'
|
artist2 = music.items.collection["dBridge"] # items can be used to access contents whose names are legal in python
|
||||||
|
album1 = artist1["1984"] # raises an OSError if it cannot be found
|
||||||
downs = user / 'Downloads'
|
album2 = music["collection/dBridge/the gemini principle"]
|
||||||
web = downs / 'tools/languages' # need library class
|
print(album1.sameas(album2))
|
||||||
|
# False
|
||||||
dev = Directory(r"e:/")
|
track1 = album1['05 portraits of the unknown']
|
||||||
sp = dev / 'shellpower'
|
# Metadata
|
||||||
|
print(music.mimes)
|
||||||
git = dev / 'gitting'
|
# ('audio/mpeg', 'audio/x-wav', 'image/jpeg', 'application/x-sqlite3')
|
||||||
clones = git/'gitclone/clones'
|
print(music.kinds)
|
||||||
ignore = clones / 'github/gitignore'
|
# ('mpeg', 'x-wav', 'jpeg', 'x-sqlite3')
|
||||||
mdn = git / r'gitclone\clones\mdn\content\files\en-us'
|
print(music.exts)
|
||||||
brython = git / r'gitclone\clones\brython-dev\brython\www\doc\en'
|
# ('.mp3', '.wav', '.jpg', '.ini', '.fpl', '.itdb', '.itl', '.plist')
|
||||||
|
|
||||||
projects = dev / 'projects'
|
|
||||||
monties = projects / 'monties'
|
|
||||||
|
|
||||||
site = dev / 'Languages\Python38-64\lib'
|
|
||||||
docs = monties / 'docs'
|
|
||||||
|
|
||||||
prod = Directory(r'f:/')
|
|
||||||
flps = prod / 'programs/project files/fl'
|
|
||||||
|
|
||||||
def killfl():
|
|
||||||
kill('fl64')
|
|
||||||
kill('ilbridge')
|
|
||||||
|
|
||||||
def chdir(path):
|
|
||||||
global cd
|
|
||||||
# import os
|
|
||||||
os.chdir(path)
|
|
||||||
cd = Directory(path)
|
|
||||||
# os.chdir = chdir
|
|
||||||
|
|
||||||
# p = videos / "please refrain from touching the pelican\\told you so"
|
|
||||||
# play = lambda x, d=p: ffplay((d/x).path, hide=False, loop=False, fullscreen=False)
|
|
||||||
# rename = lambda x, y, d=p: (d/x).rename(y)
|
|
||||||
# find = lambda words, ext='': show
|
|
||||||
|
|
||||||
class Scanner:
|
|
||||||
"""
|
|
||||||
Create an object which scans a text file for a given keyword
|
|
||||||
"""
|
|
||||||
def __init__(self, keywords:str, mode:str='r', strict:bool=True, prescaped:bool=False, casefold:bool=True, opener:Callable=open, lines:bool=True):
|
|
||||||
"""
|
|
||||||
params:
|
|
||||||
keywords
|
|
||||||
terms to search for
|
|
||||||
mode
|
|
||||||
'r' or 'rb'
|
|
||||||
strict
|
|
||||||
True -> search for words
|
|
||||||
False -> clauses
|
|
||||||
prescaped
|
|
||||||
whether or not terms have already been regex escaped
|
|
||||||
casefold
|
|
||||||
true -> case insensitive
|
|
||||||
opener
|
|
||||||
must return an object with a "readlines" or "read" method (depends on lines)
|
|
||||||
lines
|
|
||||||
|
|
||||||
"""
|
|
||||||
self.casefold = casefold
|
|
||||||
self.keywords = keywords
|
|
||||||
self.opener = opener
|
|
||||||
self.lines = lines
|
|
||||||
self.mode = mode
|
|
||||||
self.strict = strict
|
|
||||||
self.prescaped = prescaped
|
|
||||||
@property
|
|
||||||
def __keywords(self):
|
|
||||||
"""
|
|
||||||
handles any necessary escaping
|
|
||||||
"""
|
|
||||||
return re.escape(self.keywords) if not self.prescaped else self.keywords
|
|
||||||
@property
|
|
||||||
def __casefold(self):
|
|
||||||
"""
|
|
||||||
standardize the case-fold setting
|
|
||||||
"""
|
|
||||||
return re.I if self.casefold else 0
|
|
||||||
@property
|
|
||||||
def pattern(self):
|
|
||||||
"""
|
|
||||||
compile the search pattern
|
|
||||||
"""
|
|
||||||
return re.compile(
|
|
||||||
(
|
|
||||||
join(self.__keywords.split(), '|'),
|
|
||||||
self.__keywords
|
|
||||||
)[self.strict],
|
|
||||||
self.__casefold
|
|
||||||
)
|
|
||||||
def __call__(self, path:str, lines:bool=None):
|
|
||||||
"""
|
|
||||||
Scan a file at a given path for a predefined word/clause
|
|
||||||
"""
|
|
||||||
if isinstance(lines, type(None)):
|
|
||||||
lines = self.lines
|
|
||||||
with self.opener(path, self.mode) as fob:
|
|
||||||
if lines:
|
|
||||||
return self.pattern.search(path) or any(map(self.pattern.search, fob.readlines()))
|
|
||||||
return self.pattern.search(path) or any(map(self.pattern.search, fob.read()))
|
|
||||||
def scan(keywords:str, mode='r', strict=True, prescaped=False, casefold=True):
|
|
||||||
casefold = (0, re.I)[casefold]
|
|
||||||
keywords = re.escape(keywords) if not prescaped else keywords
|
|
||||||
pattern = re.compile(keywords if strict and not prescaped else join(keywords.split(), '|'), casefold)
|
|
||||||
def wrap(path):
|
|
||||||
with open(path, mode) as fob:
|
|
||||||
return any(map(pattern.search, fob.readlines())) or pattern.search(path)
|
|
||||||
return wrap
|
|
||||||
# show(user('', ext='txt'))
|
|
||||||
|
|
||||||
def philter(func, itr, start=1, index=False):
|
|
||||||
for i, e in enumerate(itr, start):
|
|
||||||
if any(j in e for j in 'venv'.split()):
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
if func(e):
|
|
||||||
# yield i, e if index else e
|
|
||||||
yield (e, (i, e))[index]
|
|
||||||
except UnicodeDecodeError:
|
|
||||||
# print(f"UnicodeDecodeError @ {e}")
|
|
||||||
# raise
|
|
||||||
# break
|
|
||||||
continue
|
|
||||||
def docsearch(keywords:str, location:Directory=monties, ext:str='py'):
|
|
||||||
show(filter(scan(keywords), location('', ext=ext)))
|
|
||||||
exotics = {
|
|
||||||
"cdot": "·",
|
|
||||||
}
|
|
||||||
exords = {key: ord(val) for key, val in exotics.items()}
|
|
||||||
tfs = [
|
|
||||||
r'C:\Users\Kenneth\childlist.txt',
|
|
||||||
r'C:\Users\Kenneth\file.txt',
|
|
||||||
# r'C:\Users\Kenneth\frozenpips.txt',
|
|
||||||
r'C:\Users\Kenneth\parentlist.txt',
|
|
||||||
# r'C:\Users\Kenneth\pipfreeze.txt',
|
|
||||||
# r'C:\Users\Kenneth\pipsweets.txt',
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# tword = 'def clone'
|
# Searching and Libraries
|
||||||
# show(filter(scan(tword), monties('', ext='py')))
|
lib = Library(album1, album2, artist1, artist2)
|
||||||
# show(map(pop, filter(scan(tword), tfs)))
|
playlist = "*".join(lib('', exts='Aac Midi Mp3 M4a Ogg Flac Wav Amr')) # search library for any path-strings regex-matching (non-regex enabled by default) the empty string. Directories are also searchable via __call__
|
||||||
# show(filter(scan(tword), tfs))
|
ffplay(playlist, loop=False, randomize=True, hide=True, fullscreen=False) # media playback via FFMPEG
|
||||||
|
```
|
||||||
|
|
||||||
# show(downs('tensor', ext='pdf'))
|
|
||||||
# with open('')
|
|
||||||
# with (Directory('~') / 'pyo_rec.wav').open('r') as fob:
|
|
||||||
# help(fob)
|
|
||||||
# print(fob.read())
|
|
||||||
# fob = fob.open(
|
|
||||||
# f = (Directory('~') / 'pyo_rec.wav')
|
|
||||||
# help(f.open)
|
|
53
readme.rst
53
readme.rst
|
@ -1,33 +1,38 @@
|
||||||
|
Filey
|
||||||
|
=====
|
||||||
|
|
||||||
Flexible functions and handy handles for your favourite filey things.
|
Flexible functions and handy handles for your favourite filey things.
|
||||||
|
|
||||||
ΓÇ£ΓÇ£ΓÇ£python # central_nervous_system.py import os
|
\````python # central_nervous_system.py import os, random
|
||||||
|
|
||||||
from filey import Directory, File, ffplay, convert
|
from filey import Address, Directory, File, Library, ffplay, convert
|
||||||
|
|
||||||
this = **file** here = os.path.dirname(**file**) pwd = Directory(here)
|
this = **file** here = os.path.dirname(**file**) pwd = Address(here).obj
|
||||||
|
|
||||||
here == str(pwd) # True
|
print(here == str(pwd)) print(isinstance(pwd, Directory))
|
||||||
|
|
||||||
def cd(path): global pwd os.chdir(path) pwd.path = path
|
def cd(path): global pwd if isinstance(path, str): os.chdir(path)
|
||||||
|
pwd.path = path elif isinstance(path, Directory): path.enter() pwd.path
|
||||||
|
= path.path else: raise ValueError
|
||||||
|
|
||||||
.. raw:: html
|
user = Directory(ΓÇÿ~ΓÇÖ) music = user / ΓÇ£musicΓÇ¥ artist1 =
|
||||||
|
music[ΓÇ£Collection/Alix PerezΓÇ¥] artist2 =
|
||||||
|
music.items.collection[ΓÇ£dBridgeΓÇ¥] # items can be used to access contents
|
||||||
|
whose names are legal in python album1 = artist1[ΓÇ£1984ΓÇ¥] # raises an
|
||||||
|
OSError if it cannot be found album2 = music[ΓÇ£collection/dBridge/the
|
||||||
|
gemini principleΓÇ¥] print(album1.sameas(album2)) # False track1 =
|
||||||
|
album1[ΓÇÿ05 portraits of the unknownΓÇÖ] # Metadata print(music.mimes) #
|
||||||
|
(ΓÇÿaudio/mpegΓÇÖ, ΓÇÿaudio/x-wavΓÇÖ, ΓÇÿimage/jpegΓÇÖ, ΓÇÿapplication/x-sqlite3ΓÇÖ)
|
||||||
|
print(music.kinds) # (ΓÇÿmpegΓÇÖ, ΓÇÿx-wavΓÇÖ, ΓÇÿjpegΓÇÖ, ΓÇÿx-sqlite3ΓÇÖ)
|
||||||
|
print(music.exts) # (ΓÇÿ.mp3ΓÇÖ, ΓÇÿ.wavΓÇÖ, ΓÇÿ.jpgΓÇÖ, ΓÇÿ.iniΓÇÖ, ΓÇÿ.fplΓÇÖ, ΓÇÿ.itdbΓÇÖ,
|
||||||
|
ΓÇÿ.itlΓÇÖ, ΓÇÿ.plistΓÇÖ)
|
||||||
|
|
||||||
<!-- c = Directory('c:/') -->
|
Searching and Libraries
|
||||||
|
=======================
|
||||||
|
|
||||||
.. raw:: html
|
lib = Library(album1, album2, artist1, artist2) playlist =
|
||||||
|
ΓÇ£*ΓÇ£.join(lib(ΓÇÖΓÇÿ, exts=ΓÇÖAac Midi Mp3 M4a Ogg Flac Wav AmrΓÇÖ)) # search
|
||||||
<!-- e = Directory('e:/') -->
|
library for any path-strings regex-matching (non-regex enabled by
|
||||||
|
default) the empty string. Directories are also searchable via **call**
|
||||||
.. raw:: html
|
ffplay(playlist, loop=False, randomize=True, hide=True,
|
||||||
|
fullscreen=False) # media playback via FFMPEG \``\`
|
||||||
<!-- f = Directory('f:/') -->
|
|
||||||
|
|
||||||
user = Directory(ΓÇÿ~ΓÇÖ) music = user / ΓÇ£musicΓÇ¥ album1 =
|
|
||||||
music[ΓÇ£collection/Alix Perez/1984ΓÇ¥] # raises an OSError if it cannot be
|
|
||||||
found album2 = music[ΓÇ£collection/dBridge/the gemini principleΓÇ¥] artist1
|
|
||||||
= music.items.collection[ΓÇ£venuq/escrowsΓÇ¥] playlist = Library(album1,
|
|
||||||
album2, artist1) for track in playlist(ΓÇÖΓÇÖ): # search library for any
|
|
||||||
matches of the empty string. Directories are also searchable via
|
|
||||||
**call** ffplay(track.path)
|
|
||||||
|
|
||||||
ΓÇ£ΓÇ£ΓÇ¥
|
|
||||||
|
|
Loading…
Reference in New Issue