rdxz2-utill 0.0.4__tar.gz → 0.0.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of rdxz2-utill might be problematic. Click here for more details.

Files changed (40) hide show
  1. {rdxz2_utill-0.0.4/src/rdxz2_utill.egg-info → rdxz2_utill-0.0.5}/PKG-INFO +1 -1
  2. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/pyproject.toml +1 -1
  3. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5/src/rdxz2_utill.egg-info}/PKG-INFO +1 -1
  4. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_bq.py +2 -0
  5. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_pg.py +21 -19
  6. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/LICENSE +0 -0
  7. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/README.md +0 -0
  8. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/setup.cfg +0 -0
  9. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/rdxz2_utill.egg-info/SOURCES.txt +0 -0
  10. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/rdxz2_utill.egg-info/dependency_links.txt +0 -0
  11. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/rdxz2_utill.egg-info/entry_points.txt +0 -0
  12. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/rdxz2_utill.egg-info/requires.txt +0 -0
  13. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/rdxz2_utill.egg-info/top_level.txt +0 -0
  14. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/__init__.py +0 -0
  15. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/cmd/__init__.py +0 -0
  16. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/cmd/_bq.py +0 -0
  17. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/cmd/_conf.py +0 -0
  18. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/cmd/_enc.py +0 -0
  19. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/cmd/_main.py +0 -0
  20. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/cmd/_pg.py +0 -0
  21. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/cmd/utill.py +0 -0
  22. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_compare.py +0 -0
  23. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_const.py +0 -0
  24. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_csv.py +0 -0
  25. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_datetime.py +0 -0
  26. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_dict.py +0 -0
  27. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_encryption.py +0 -0
  28. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_env.py +0 -0
  29. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_file.py +0 -0
  30. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_gcs.py +0 -0
  31. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_input.py +0 -0
  32. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_json.py +0 -0
  33. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_mb.py +0 -0
  34. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_queue.py +0 -0
  35. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_string.py +0 -0
  36. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_style.py +0 -0
  37. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_tunnel.py +0 -0
  38. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/my_xlsx.py +0 -0
  39. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/templates/mb.json +0 -0
  40. {rdxz2_utill-0.0.4 → rdxz2_utill-0.0.5}/src/utill/templates/pg.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rdxz2-utill
3
- Version: 0.0.4
3
+ Version: 0.0.5
4
4
  Summary: Your daily Python utility
5
5
  Author-email: Richard Dharmawan <richard.dharmawan@gmail.com>
6
6
  License: MIT License
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "rdxz2-utill"
7
- version = "0.0.4"
7
+ version = "0.0.5"
8
8
  authors = [
9
9
  { name="Richard Dharmawan", email="richard.dharmawan@gmail.com" },
10
10
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rdxz2-utill
3
- Version: 0.0.4
3
+ Version: 0.0.5
4
4
  Summary: Your daily Python utility
5
5
  Author-email: Richard Dharmawan <richard.dharmawan@gmail.com>
6
6
  License: MIT License
@@ -247,6 +247,8 @@ class BQ():
247
247
  def download_csv(self, query: str, dst_filename: str, combine: bool = True, pre_query: str = None):
248
248
  if not dst_filename.endswith('.csv'):
249
249
  raise ValueError('Destination filename must ends with .csv!')
250
+
251
+ dst_filename = os.path.expanduser(dst_filename)
250
252
 
251
253
  dirname = dst_filename.removesuffix('.csv')
252
254
 
@@ -99,59 +99,61 @@ class PG:
99
99
  for data in copy:
100
100
  f.write(data)
101
101
 
102
- def pg_to_pg(self, pg: "PG", source_table: str, target_table: str, cols: list[str] = None) -> None:
102
+ def pg_to_pg(self, pg: "PG", src_table_name: str, dst_table_name: str, cols: list[str] = None) -> None:
103
103
  tmp_filename = generate_random_string() + '.csv'
104
104
  cols_str = ','.join([f'"{x}"' for x in cols]) if (cols is not None and cols != []) else '*'
105
105
  try:
106
- self.download_csv(f'SELECT {cols_str} FROM {source_table}', tmp_filename)
107
- pg.upload_csv(tmp_filename, target_table)
106
+ self.download_csv(f'SELECT {cols_str} FROM {src_table_name}', tmp_filename)
107
+ pg.upload_csv(tmp_filename, dst_table_name)
108
108
  except:
109
109
  raise
110
110
  finally:
111
111
  os.remove(tmp_filename) if os.path.exists(tmp_filename) else None
112
112
 
113
113
  def check_table_existence(self, table_name: str) -> bool:
114
- if not self.execute_query('''SELECT count(1) AS "cnt" FROM "information_schema"."tables" WHERE "table_schema" || '.' || "table_name" = '%s';''', table_name).fetchone()['cnt']:
114
+ if not self.execute_query('''SELECT count(1) AS "cnt" FROM "information_schema"."tables" WHERE "table_schema" || '.' || "table_name" = %s;''', table_name).fetchone()[0]:
115
115
  raise Exception(f'Target table \'{table_name}\' not created, please create it first!')
116
116
 
117
- def upload_tuples(self, cols: list[str], tuples: list[tuple], table_name: str) -> None:
118
- self.check_table_existence(table_name)
117
+ def upload_tuples(self, cols: list[str], src_tuples: list[tuple], src_table_name: str) -> None:
118
+ self.check_table_existence(src_table_name)
119
119
 
120
120
  cols_str = ','.join([f'"{x}"' for x in cols])
121
- query = f'''COPY {table_name}({cols_str}) FROM STDIN'''
121
+ query = f'''COPY {src_table_name}({cols_str}) FROM STDIN'''
122
122
  logger.debug(f'🔎 Query:\n{query}')
123
123
  with self.cursor.copy(query) as copy:
124
- for row in tuples:
124
+ for row in src_tuples:
125
125
  copy.write_row(row)
126
126
 
127
- def upload_list_of_dict(self, data: list[dict], table_name: str) -> None:
128
- self.check_table_existence(table_name)
127
+ def upload_list_of_dict(self, src_data: list[dict], dst_table_name: str) -> None:
128
+ self.check_table_existence(dst_table_name)
129
129
 
130
- if len(data) == 0:
130
+ if len(src_data) == 0:
131
131
  raise ValueError('No data to upload!')
132
132
 
133
- cols = data[0].keys()
133
+ cols = src_data[0].keys()
134
134
  cols_str = ','.join([f'"{x}"' for x in cols])
135
- query = f'''COPY {table_name}({cols_str}) FROM STDIN'''
135
+ query = f'''COPY {dst_table_name}({cols_str}) FROM STDIN'''
136
136
  logger.debug(f'🔎 Query:\n{query}')
137
137
  with self.cursor.copy(query) as copy:
138
- for row in data:
138
+ for row in src_data:
139
139
  copy.write_row(tuple(row[col] for col in cols))
140
140
 
141
- def upload_csv(self, file_path: str, table_name: str) -> None:
142
- self.check_table_existence(table_name)
141
+ def upload_csv(self, src_filename: str, dst_table_name: str) -> None:
142
+ src_filename = os.path.expanduser(src_filename)
143
143
 
144
- cols_str = ','.join([f'"{x}"' for x in next(csv.reader(open(file_path, 'r')))])
144
+ self.check_table_existence(dst_table_name)
145
+
146
+ cols_str = ','.join([f'"{x}"' for x in next(csv.reader(open(src_filename, 'r')))])
145
147
  query = dedent(
146
148
  f'''
147
- COPY {table_name}({cols_str})
149
+ COPY {dst_table_name}({cols_str})
148
150
  FROM STDIN
149
151
  DELIMITER ','
150
152
  CSV HEADER;
151
153
  '''
152
154
  )
153
155
  logger.debug(f'🔎 Query:\n{query}')
154
- with open(os.path.expanduser(file_path), 'r') as f:
156
+ with open(os.path.expanduser(src_filename), 'r') as f:
155
157
  with self.cursor.copy(query) as copy:
156
158
  while data := f.read(1024):
157
159
  copy.write(data)
File without changes
File without changes
File without changes