6
6
import json
7
7
import logging
8
8
import os
9
+ import tempfile
9
10
10
11
# Third-party
11
12
import git
26
27
f"@github.com/{ GITHUB_ORGANIZATION } /{ GITHUB_REPO_NAME } .git"
27
28
)
28
29
29
- WORKING_DIRECTORY = "/tmp"
30
- GIT_WORKING_DIRECTORY = f"{ WORKING_DIRECTORY } /{ GITHUB_REPO_NAME } "
31
- JSON_FILE_DIRECTORY = f"{ GIT_WORKING_DIRECTORY } /databags"
30
+ JSON_FILE_DIR = "databags"
32
31
33
32
log_name = os .path .basename (os .path .splitext (inspect .stack ()[- 1 ].filename )[0 ])
34
33
logger = logging .getLogger (log_name )
35
34
log .reset_handler ()
36
35
37
36
38
- def set_up_repo ():
39
- if not os .path .isdir (GIT_WORKING_DIRECTORY ):
37
+ def set_up_repo (git_working_dir ):
38
+ if not os .path .isdir (git_working_dir ):
40
39
logger .log (logging .INFO , "Cloning repo..." )
41
40
repo = git .Repo .clone_from (
42
- url = GITHUB_REPO_URL_WITH_CREDENTIALS , to_path = GIT_WORKING_DIRECTORY
41
+ url = GITHUB_REPO_URL_WITH_CREDENTIALS , to_path = git_working_dir
43
42
)
44
43
else :
45
44
logger .log (logging .INFO , "Setting up repo..." )
46
- repo = git .Repo (GIT_WORKING_DIRECTORY )
45
+ repo = git .Repo (git_working_dir )
47
46
origin = repo .remotes .origin
48
47
logger .log (logging .INFO , "Pulling latest code..." )
49
48
origin .pull ()
50
- return f"{ WORKING_DIRECTORY } /{ GITHUB_REPO_NAME } "
51
49
52
50
53
51
def set_up_git_user ():
@@ -58,16 +56,16 @@ def set_up_git_user():
58
56
os .environ ["GIT_COMMITTER_EMAIL" ] = GIT_USER_EMAIL
59
57
60
58
61
- def generate_json_file (data , filename ):
59
+ def generate_json_file (git_working_dir , data , filename ):
62
60
logger .log (logging .INFO , "Generating JSON file..." )
63
- json_filename = f" { JSON_FILE_DIRECTORY } / { filename } "
61
+ json_filename = os . path . join ( git_working_dir , JSON_FILE_DIR , filename )
64
62
with open (json_filename , "w" ) as json_file :
65
63
json .dump (data , json_file , sort_keys = True , indent = 4 )
66
64
return json_filename
67
65
68
66
69
- def commit_and_push_changes (json_filename ):
70
- repo = git .Repo (GIT_WORKING_DIRECTORY )
67
+ def commit_and_push_changes (git_working_dir , json_filename ):
68
+ repo = git .Repo (git_working_dir )
71
69
git_diff = repo .index .diff (None )
72
70
if git_diff :
73
71
repo .index .add (items = f"{ json_filename } " )
@@ -80,7 +78,9 @@ def commit_and_push_changes(json_filename):
80
78
81
79
82
80
def push_data (data , filename ):
83
- set_up_repo ()
84
- set_up_git_user ()
85
- json_filename = generate_json_file (data , filename )
86
- commit_and_push_changes (json_filename )
81
+ with tempfile .TemporaryDirectory () as temp_dir :
82
+ git_working_dir = os .path .join (temp_dir , GITHUB_REPO_NAME )
83
+ set_up_repo (git_working_dir )
84
+ set_up_git_user ()
85
+ json_filename = generate_json_file (git_working_dir , data , filename )
86
+ commit_and_push_changes (git_working_dir , json_filename )
0 commit comments