Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit32ba8c5

Browse files
committed
Move birdseye and snoop logic to separate lazily imported files
1 parent8ec12a7 commit32ba8c5

File tree

5 files changed

+83
-54
lines changed

5 files changed

+83
-54
lines changed

‎backend/book/settings.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"""
1212

1313
importos
14+
importsys
1415
frompathlibimportPath
1516

1617
importbirdseye
@@ -27,7 +28,7 @@
2728

2829
DEBUG=os.environ.get('DEBUG','True')[0].upper()=='T'
2930

30-
snoop.install(enabled=DEBUG)
31+
snoop.install(enabled=DEBUG,out=sys.__stderr__,columns=['thread'])
3132

3233
GITHUB_TOKEN=os.environ.get('GITHUB_TOKEN')
3334

‎backend/main/utils/__init__.py‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ def print_exception():
6262
print(format_exception_string(),file=sys.stderr)
6363

6464

65-
6665
defrow_to_dict(row):
6766
d=row.__dict__.copy()
6867
deld["_sa_instance_state"]

‎backend/main/worker.py‎

Lines changed: 9 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
importast
21
importatexit
32
importinspect
43
importlinecache
@@ -11,32 +10,22 @@
1110
importtraceback
1211
fromcodeimportInteractiveConsole
1312
fromcollectionsimportdefaultdict
14-
fromdatetimeimportdatetime
1513
fromfunctoolsimportlru_cache
1614
fromimportlibimportimport_module
1715
frommultiprocessing.contextimportProcess
1816
fromthreadingimportThread
1917

20-
importbirdseye.bird
21-
importsnoop
22-
importsnoop.formatting
23-
importsnoop.tracer
24-
frombirdseye.birdimportBirdsEye
2518
fromlittleutilsimportsetup_quick_console_logging
26-
fromsnoopimportsnoop
2719

2820
frommain.textimportpages
29-
frommain.utilsimportrows_to_dicts,print_exception
21+
frommain.utilsimportprint_exception
3022
frommain.workers.communicationsimportAbstractCommunications,ThreadCommunications
3123

24+
3225
log=logging.getLogger(__name__)
3326

3427
TESTING=False
3528

36-
snoop.install(out=sys.__stderr__,columns=['thread'])
37-
38-
birdseye.bird.get_unfrozen_datetime=datetime.now
39-
4029

4130
classSysStream:
4231
def__init__(self,output,color):
@@ -70,20 +59,6 @@ def string(self):
7059

7160
output_buffer=OutputBuffer()
7261

73-
snoop.tracer.internal_directories+= (os.path.dirname((lambda:0).__code__.co_filename),)
74-
75-
76-
classPatchedFrameInfo(snoop.tracer.FrameInfo):
77-
def__init__(self,*args,**kwargs):
78-
super().__init__(*args,**kwargs)
79-
code=self.frame.f_code
80-
self.is_ipython_cell= (
81-
code.co_name=='<module>'and
82-
code.co_filename=="my_program.py"
83-
)
84-
85-
86-
snoop.tracer.FrameInfo=PatchedFrameInfo
8762

8863
console=InteractiveConsole()
8964

@@ -109,7 +84,6 @@ def runner(code_source, code):
10984
[line+'\n'forlineincode.splitlines()],
11085
filename,
11186
)
112-
snoop.formatting.Source._class_local('__source_cache', {}).pop(filename,None)
11387

11488
try:
11589
code_obj=compile(code,filename,"exec")
@@ -120,30 +94,11 @@ def runner(code_source, code):
12094
birdseye_objects=None
12195

12296
ifcode_source=="snoop":
123-
config=snoop.Config(
124-
columns=(),
125-
out=sys.stdout,
126-
color=True,
127-
)
128-
tracer=config.snoop()
129-
tracer.variable_whitelist=set()
130-
fornodeinast.walk(ast.parse(code)):
131-
ifisinstance(node,ast.Name):
132-
name=node.id
133-
tracer.variable_whitelist.add(name)
134-
tracer.target_codes.add(code_obj)
135-
withtracer:
136-
execute(code_obj)
97+
frommain.workers.snoopimportexec_snoop
98+
exec_snoop(filename,code,code_obj)
13799
elifcode_source=="birdseye":
138-
eye=BirdsEye("sqlite://")
139-
traced_file=eye.compile(code,filename)
140-
eye._trace('<module>',filename,traced_file,traced_file.code,'module',code)
141-
console.locals=eye._trace_methods_dict(traced_file)
142-
execute(traced_file.code)
143-
witheye.db.session_scope()assession:
144-
objects=session.query(eye.db.Call,eye.db.Function).all()
145-
calls,functions= [rows_to_dicts(set(column))forcolumninzip(*objects)]
146-
birdseye_objects=dict(calls=calls,functions=functions)
100+
frommain.workers.birdseyeimportexec_birdseye
101+
birdseye_objects=exec_birdseye(filename,code)
147102
else:
148103
execute(code_obj)
149104

@@ -203,6 +158,9 @@ def set_limits():
203158
exceptValueError:
204159
pass
205160

161+
frommain.workersimportsnoop,birdseye
162+
str([snoop,birdseye])
163+
206164
resource.setrlimit(resource.RLIMIT_NOFILE, (0,0))
207165

208166

@@ -256,7 +214,6 @@ def worker_loop(task_queue, input_queue, result_queue):
256214
result_queue.put(None)
257215
input_queue.empty()
258216
task_queue.empty()
259-
str(BirdsEye().db)
260217

261218
set_limits()
262219

‎backend/main/workers/birdseye.py‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
fromdatetimeimportdatetime
2+
3+
importbirdseye.bird
4+
frombirdseye.birdimportBirdsEye
5+
6+
frommain.utilsimportrows_to_dicts
7+
frommain.workerimportconsole,execute
8+
9+
birdseye.bird.get_unfrozen_datetime=datetime.now
10+
11+
# Import necessary files before limit is set
12+
str(BirdsEye("sqlite://").db)
13+
14+
15+
defexec_birdseye(filename,code):
16+
# Create database in memory
17+
eye=BirdsEye("sqlite://")
18+
traced_file=eye.compile(code,filename)
19+
eye._trace('<module>',filename,traced_file,traced_file.code,'module',code)
20+
console.locals=eye._trace_methods_dict(traced_file)
21+
execute(traced_file.code)
22+
witheye.db.session_scope()assession:
23+
objects=session.query(eye.db.Call,eye.db.Function).all()
24+
calls,functions= [rows_to_dicts(set(column))forcolumninzip(*objects)]
25+
returndict(calls=calls,functions=functions)

‎backend/main/workers/snoop.py‎

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
importast
2+
importos
3+
importsys
4+
5+
importsnoop
6+
importsnoop.formatting
7+
importsnoop.tracer
8+
9+
frommain.workerimportexecute
10+
11+
snoop.tracer.internal_directories+= (
12+
os.path.dirname(os.path.dirname(
13+
(lambda:0).__code__.co_filename
14+
)),
15+
)
16+
17+
18+
classPatchedFrameInfo(snoop.tracer.FrameInfo):
19+
def__init__(self,*args,**kwargs):
20+
super().__init__(*args,**kwargs)
21+
code=self.frame.f_code
22+
self.is_ipython_cell= (
23+
code.co_name=='<module>'and
24+
code.co_filename=="my_program.py"
25+
)
26+
27+
28+
snoop.tracer.FrameInfo=PatchedFrameInfo
29+
30+
31+
defexec_snoop(filename,code,code_obj):
32+
snoop.formatting.Source._class_local('__source_cache', {}).pop(filename,None)
33+
34+
config=snoop.Config(
35+
columns=(),
36+
out=sys.stdout,
37+
color=True,
38+
)
39+
tracer=config.snoop()
40+
tracer.variable_whitelist=set()
41+
fornodeinast.walk(ast.parse(code)):
42+
ifisinstance(node,ast.Name):
43+
name=node.id
44+
tracer.variable_whitelist.add(name)
45+
tracer.target_codes.add(code_obj)
46+
withtracer:
47+
execute(code_obj)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp