Skip to content

Commit e56208f

Browse files
committed
troca de urls WIP
1 parent aa4d93d commit e56208f

File tree

6 files changed

+112
-2
lines changed

6 files changed

+112
-2
lines changed

links/FPY.LI.htaccess

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1070,6 +1070,28 @@ RedirectTemp /24-27 https://docs.python.org/3/library/functools.html#functools.t
10701070
RedirectTemp /24-28 https://www.python.org/download/releases/2.2.3/descrintro/
10711071
RedirectTemp /24-29 https://github.com/lihaoyi/macropy
10721072
RedirectTemp /24-30 https://people.eecs.berkeley.edu/~bh/ss-toc2.html
1073+
# content of short.htaccess file created and managed by short.py
10731074

1074-
####################### end of custom URLs
1075+
# appended: 2025-05-23 15:12:13
1076+
RedirectTemp /22 https://pythonfluente.com/2/#pattern_matching_case_study_sec
1077+
RedirectTemp /23 https://pythonfluente.com/2/#how_slicing_works
1078+
RedirectTemp /24 https://pythonfluente.com/2/#sliceable_sequence
1079+
RedirectTemp /25 https://pythonfluente.com/2/#virtual_subclass_sec
1080+
RedirectTemp /26 https://pythonfluente.com/2/#environment_class_ex
1081+
RedirectTemp /27 https://pythonfluente.com/2/#subclass_builtin_woes
1082+
RedirectTemp /28 https://pythonfluente.com/2/#slots_section
1083+
RedirectTemp /29 https://pythonfluente.com/2/#typeddict_sec
1084+
RedirectTemp /2a https://pythonfluente.com/2/#problems_annot_runtime_sec
1085+
RedirectTemp /2b https://pythonfluente.com/2/#legacy_deprecated_typing_box
1086+
RedirectTemp /2c https://pythonfluente.com/2/#positional_pattern_implement_sec
10751087

1088+
# appended 2025-06-17 19:49:42
1089+
RedirectTemp /2d https://docs.python.org/pt-br/3/reference/lexical_analysis.html#reserved-classes-of-identifiers
1090+
RedirectTemp /2e https://docs.python.org/pt-br/3/library/doctest.html
1091+
RedirectTemp /2f https://docs.python.org/pt-br/3.10/library/string.html#format-string-syntax
1092+
RedirectTemp /2g https://docs.python.org/pt-br/3/library/stdtypes.html#truth
1093+
RedirectTemp /2h https://docs.python.org/pt-br/3/tutorial/controlflow.html#unpacking-argument-lists
1094+
RedirectTemp /2j https://docs.python.org/pt-br/3/reference/datamodel.html
1095+
RedirectTemp /2k https://dabeaz.com/per.html
1096+
RedirectTemp /2m https://mitpress.mit.edu/books/art-metaobject-protocol
1097+
RedirectTemp /2n https://plone.org.br/

links/cap01-replacements.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/2d https://docs.python.org/pt-br/3/reference/lexical_analysis.html#reserved-classes-of-identifiers
2+
/2e https://docs.python.org/pt-br/3/library/doctest.html
3+
/2f https://docs.python.org/pt-br/3.10/library/string.html#format-string-syntax
4+
/2g https://docs.python.org/pt-br/3/library/stdtypes.html#truth
5+
/2h https://docs.python.org/pt-br/3/tutorial/controlflow.html#unpacking-argument-lists
6+
/2j https://docs.python.org/pt-br/3/reference/datamodel.html
7+
/2j https://docs.python.org/pt-br/3/reference/datamodel.html
8+
/2k https://dabeaz.com/per.html
9+
/2m https://mitpress.mit.edu/books/art-metaobject-protocol
10+
/2j https://docs.python.org/pt-br/3/reference/datamodel.html
11+
/2n https://plone.org.br/

links/data/sample.htaccess

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,14 @@ RedirectTemp /1-20 https://www.fluentpython.com/
99
RedirectTemp /ora https://www.oreilly.com/.../9781492056348/
1010
RedirectTemp /2-10 http://example.com/
1111
RedirectTemp /10-2 http://example.com/
12+
13+
# appended 2025-06-17 19:05:20
14+
RedirectTemp /22 https://docs.python.org/pt-br/3/reference/lexical_analysis.html#reserved-classes-of-identifiers
15+
RedirectTemp /23 https://docs.python.org/pt-br/3/library/doctest.html
16+
RedirectTemp /24 https://docs.python.org/pt-br/3.10/library/string.html#format-string-syntax
17+
RedirectTemp /25 https://docs.python.org/pt-br/3/library/stdtypes.html#truth
18+
RedirectTemp /26 https://docs.python.org/pt-br/3/tutorial/controlflow.html#unpacking-argument-lists
19+
RedirectTemp /27 https://docs.python.org/pt-br/3/reference/datamodel.html
20+
RedirectTemp /28 https://dabeaz.com/per.html
21+
RedirectTemp /29 https://mitpress.mit.edu/books/art-metaobject-protocol
22+
RedirectTemp /2a https://plone.org.br/

links/replace_urls.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/usr/bin/env python3
2+
3+
import sys
4+
5+
def main():
6+
adoc_name = sys.argv[2]
7+
pairs_name = sys.argv[1]
8+
pairs = []
9+
with open(pairs_name) as fp:
10+
for line in fp.readlines():
11+
pair = line.split()[-2:]
12+
assert len(pair) == 2, f'pair not found: {line}'
13+
assert pair[0].startswith('/'), f'no path: {line}'
14+
pairs.append(pair)
15+
16+
assert len(pairs) > 0, f'no pairs found in {pairs_name}'
17+
18+
with open(adoc_name) as fp:
19+
adoc = fp.read()
20+
21+
initial_adoc = adoc
22+
23+
for path, url in pairs:
24+
assert url in adoc, f'{url} not found in {adoc_name}'
25+
print(path, url)
26+
short_url = 'https://fpy.li' + path
27+
adoc = adoc.replace(url, short_url)
28+
29+
assert len(initial_adoc) < len(adoc), f'{adoc_name} not shortened'
30+
31+
with open(adoc_name, 'w') as fp:
32+
fp.write(adoc)
33+
34+
35+
if __name__ == '__main__':
36+
main()

links/shorten.py

100755100644
File mode changed.

links/shortener.py

100644100755
Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#!/usr/bin/env python3
2+
13
"""
24
# URL shortener for .htaccess redirects
35
@@ -56,6 +58,7 @@
5658
"""
5759

5860
import itertools
61+
import sys
5962
from collections.abc import Iterable, Iterator
6063
from typing import NamedTuple, TextIO
6164
from datetime import datetime
@@ -124,7 +127,7 @@ def update_htaccess(f: TextIO, directives: list[PathURL]) -> int:
124127
if directives:
125128
f.write(f'\n# appended {timestamp()}\n')
126129
for path, url, _new in directives:
127-
f.write(f'RedirectTemp /{path} {url}\n')
130+
f.write(f'RedirectTemp /{path}\t{url}\n')
128131
return len(directives)
129132

130133

@@ -145,3 +148,30 @@ def gen_unused_short(redirects: dict) -> Iterator[str]:
145148
for short in gen_short(2):
146149
if short not in redirects:
147150
yield short
151+
152+
153+
def main():
154+
htaccess_path, urls_path = sys.argv[1:3]
155+
with open(htaccess_path) as f:
156+
hta = f.read()
157+
assert 'RedirectTemp' in hta, 'No RedirecTemp in {htaccess_path}'
158+
with open(urls_path) as f:
159+
urls = [u.rstrip() for u in f.readlines()]
160+
161+
redirects, targets = load_redirects(parse_htaccess(hta))
162+
path_urls = []
163+
path_gen = gen_unused_short(redirects)
164+
for url in urls:
165+
path_url = shorten_one(url, path_gen, redirects, targets)
166+
path_urls.append(path_url)
167+
path, url, new = path_url
168+
flag = '*' if new else ' '
169+
print(f'{flag} /{path}\t{url}')
170+
171+
with open(htaccess_path, 'a') as f:
172+
count = update_htaccess(f, path_urls)
173+
print(f'{count} directives appended to {htaccess_path}', file=sys.stderr)
174+
175+
176+
if __name__ == '__main__':
177+
main()

0 commit comments

Comments
 (0)