q2rad 0.1.103__tar.gz → 0.1.105__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 q2rad might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: q2rad
3
- Version: 0.1.103
3
+ Version: 0.1.105
4
4
  Summary: RAD - database, GUI, reports
5
5
  Author: Andrei Puchko
6
6
  Author-email: andrei.puchko@gmx.de
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "q2rad"
3
- version = "0.1.103"
3
+ version = "0.1.105"
4
4
  description = "RAD - database, GUI, reports"
5
5
  authors = ["Andrei Puchko <andrei.puchko@gmx.de>"]
6
6
  readme = "README.md"
@@ -310,6 +310,7 @@ class AppManager(Q2Form):
310
310
  db: Q2Db = q2app.q2_app.db_logic
311
311
  db_tables = db.get_tables()
312
312
  wait_table = Q2WaitShow(len(data))
313
+ errors = []
313
314
  for table in data:
314
315
  wait_table.step(table)
315
316
  if table not in db_tables:
@@ -319,9 +320,12 @@ class AppManager(Q2Form):
319
320
  for row in data[table]:
320
321
  wait_row.step()
321
322
  if not db.insert(table, row):
322
- print(db.last_sql_error)
323
+ errors.append(db.last_sql_error)
324
+ # print(db.last_sql_error)
323
325
  wait_row.close()
324
326
  wait_table.close()
327
+ if errors:
328
+ q2Mess("<br>".join(errors))
325
329
 
326
330
  def import_data(self, file=""):
327
331
  filetype = "JSON(*.json)"
@@ -350,8 +354,8 @@ class AppManager(Q2Form):
350
354
  wait_row.step()
351
355
  if not db.raw_insert(table, row):
352
356
  errors.append(db.last_sql_error)
353
- print(db.last_sql_error)
357
+ # print(db.last_sql_error)
354
358
  wait_row.close()
359
+ wait_table.close()
355
360
  if errors:
356
361
  q2Mess("<br>".join(errors))
357
- wait_table.close()
@@ -284,6 +284,7 @@ class Q2AppSelect(Q2Form):
284
284
  }
285
285
  self._select_application(row)
286
286
  self.q2_app.migrate_db_logic()
287
+ self.q2_app.migrate_db_logic()
287
288
 
288
289
  demo_app_url = f"{self.q2_app.q2market_url}/demo_app.json"
289
290
  demo_data_url = f"{self.q2_app.q2market_url}/demo_data.json"
@@ -293,7 +294,7 @@ class Q2AppSelect(Q2Form):
293
294
  AppManager.import_json_app(json.load(response_app))
294
295
 
295
296
  self.q2_app.open_selected_app()
296
-
297
+ self.q2_app.migrate_db_data()
297
298
  AppManager.import_json_data(json.load(response_data))
298
299
  self.close()
299
300
  else:
@@ -42,7 +42,6 @@ import shutil
42
42
  import pkgutil
43
43
 
44
44
 
45
-
46
45
  # TODO: excel custom format 2 report
47
46
 
48
47
 
@@ -983,6 +983,9 @@ class Q2ReportColumns(Q2Form, ReportForm):
983
983
  self.add_control("/")
984
984
 
985
985
  def column_remove(self):
986
+ rows_qt = len(self.columns_data.rows)
987
+ if rows_qt > 1 and q2AskYN(f"This will also remove column(s) in {rows_qt} row sections ") != 2:
988
+ return
986
989
  selected_columns = list(set([x[1] for x in self.columns_sheet.get_selection()]))
987
990
  selected_columns.reverse()
988
991
  for current_column in selected_columns:
@@ -1212,6 +1215,7 @@ class Q2ReportRows(Q2Form, ReportForm):
1212
1215
  self.table_page_footer_rows = None
1213
1216
 
1214
1217
  self.spanned_cells = {}
1218
+ self.selection_first_cell = None
1215
1219
 
1216
1220
  self.report_columns_form = report_columns_form
1217
1221
  self.report_report_form: Q2ReportReport = report_columns_form.report_report_form
@@ -1409,7 +1413,7 @@ class Q2ReportRows(Q2Form, ReportForm):
1409
1413
  selected_rows = self.get_selected_rows()
1410
1414
  selected_rows.reverse()
1411
1415
  for current_row in selected_rows:
1412
- current_row = self.rows_sheet.current_row()
1416
+ # current_row = self.rows_sheet.current_row()
1413
1417
  self.rows_data.heights.pop(current_row)
1414
1418
  self.rows_sheet.remove_row(current_row)
1415
1419
  tmp = {}
@@ -1705,8 +1709,8 @@ class Q2ReportRows(Q2Form, ReportForm):
1705
1709
  # open up spanned cells
1706
1710
  for x in selection:
1707
1711
  if x in self.spanned_cells:
1708
- for row in range(x[0], x[0]+self.spanned_cells[x][0]):
1709
- for col in range(x[1], x[1]+self.spanned_cells[x][1]):
1712
+ for row in range(x[0], x[0] + self.spanned_cells[x][0]):
1713
+ for col in range(x[1], x[1] + self.spanned_cells[x][1]):
1710
1714
  if (row, col) not in selection:
1711
1715
  selection.append((row, col))
1712
1716
 
@@ -1746,18 +1750,18 @@ class Q2ReportRows(Q2Form, ReportForm):
1746
1750
  row = self.rows_sheet.current_row()
1747
1751
  column = self.rows_sheet.current_column()
1748
1752
  cell_key = f"{row},{column}"
1749
- if cell_key not in self.rows_data.cells:
1750
- self.rows_data.cells[cell_key] = {}
1751
- set_dict_default(self.rows_data.cells[cell_key], "data", "")
1752
- set_dict_default(self.rows_data.cells[cell_key], "style", {})
1753
+ self.ensure_cell(cell_key)
1753
1754
 
1754
- all_style.update(self.rows_data.cells[cell_key]["style"])
1755
+ # when selection - using style of first selected cell - fix it
1756
+ if len(self.rows_sheet.get_selection()) == 1:
1757
+ self.selection_first_cell = cell_key
1758
+ all_style.update(self.rows_data.cells[cell_key]["style"])
1755
1759
 
1756
- self.report_report_form.focus_changed(self.rows_sheet)
1760
+ self.report_report_form.focus_changed(self.rows_sheet)
1757
1761
 
1758
- self.report_report_form.update_style_bar(
1759
- all_style, self.rows_data.cells[cell_key]["style"], self.rows_data.cells[cell_key]
1760
- )
1762
+ self.report_report_form.update_style_bar(
1763
+ all_style, self.rows_data.cells[cell_key]["style"], self.rows_data.cells[cell_key]
1764
+ )
1761
1765
 
1762
1766
  def rows_sheet_focus_out(self):
1763
1767
  pass
@@ -1868,6 +1872,16 @@ class Q2ReportRows(Q2Form, ReportForm):
1868
1872
  self.add_table_footer(self.rows_data.get("table_footer"))
1869
1873
 
1870
1874
  def apply_style(self):
1875
+ selection = self.rows_sheet.get_selection()
1876
+ if len(selection) > 1:
1877
+ for cell_key in selection:
1878
+ cell_key = "{0},{1}".format(cell_key[0],cell_key[1])
1879
+ if cell_key != self.selection_first_cell:
1880
+ self.ensure_cell(cell_key)
1881
+ self.rows_data.cells[cell_key]["style"] = dict(
1882
+ self.rows_data.cells[self.selection_first_cell]["style"]
1883
+ )
1884
+
1871
1885
  self.rows_sheet.sheet_styles = self.get_style()
1872
1886
  self.rows_sheet.cell_styles = {}
1873
1887
  self.rows_sheet.clear_spans()
@@ -1884,6 +1898,12 @@ class Q2ReportRows(Q2Form, ReportForm):
1884
1898
  self.rows_sheet.set_span(row, column, rowspan, colspan)
1885
1899
  self.rows_sheet.set_cell_style_sheet(None, row, column)
1886
1900
 
1901
+ def ensure_cell(self, cell_key):
1902
+ if cell_key not in self.rows_data.cells:
1903
+ self.rows_data.cells[cell_key] = {}
1904
+ set_dict_default(self.rows_data.cells[cell_key], "data", "")
1905
+ set_dict_default(self.rows_data.cells[cell_key], "style", {})
1906
+
1887
1907
  def add_table_header(self, header_data={}):
1888
1908
  if self.rows_data.role != "table":
1889
1909
  return
@@ -0,0 +1 @@
1
+ __version__ = "0.1.105"
@@ -15,7 +15,7 @@ entry_points = \
15
15
 
16
16
  setup_kwargs = {
17
17
  'name': 'q2rad',
18
- 'version': '0.1.103',
18
+ 'version': '0.1.105',
19
19
  'description': 'RAD - database, GUI, reports',
20
20
  'long_description': '# The RAD (rapid application development) system. \n\n**(code less, make more)** \n**Based on:** \n q2db (https://pypi.org/project/q2db) \n q2gui (https://pypi.org/project/q2gui) \n q2report (https://pypi.org/project/q2report) \n\n## [Read the docs](docs/index.md) \n## Install & run\n**Linux**\n```bash\nmkdir q2rad && \\\n cd q2rad && \\\n python3 -m pip install --upgrade pip && \\\n python3 -m venv q2rad && \\\n source q2rad/bin/activate && \\\n python3 -m pip install --upgrade q2rad && \\\n q2rad\n```\n**Windows**\n```bash\nmkdir q2rad && \\\n cd q2rad && \\\n py -m pip install --upgrade pip && \\\n py -m venv q2rad && \\\n call q2rad/scripts/activate && \\\n pip install --upgrade q2rad && \\\n q2rad\n```\n**Mac**\n```bash\nmkdir q2rad && \\\n cd q2rad && \\\n python3 -m pip install --upgrade pip && \\\n python3 -m venv q2rad && \\\n source q2rad/bin/activate && \\\n python3 -m pip install --upgrade q2rad && \\\n q2rad\n```\n**Docker**\n```bash\ncurl -s https://raw.githubusercontent.com/AndreiPuchko/q2rad/main/docker-x11/dockerfile > dockerfile && \\\n mkdir -p q2rad_storage/Desktop && \\\n chmod -R 777 q2rad_storage && \\\n sudo docker build -t q2rad . && \\\n sudo docker run -it \\\n -v /tmp/.X11-unix:/tmp/.X11-unix \\\n -v $(pwd)/q2rad_storage:/home/q2rad \\\n -e DISPLAY=$DISPLAY \\\n -u q2rad q2rad python3 -m q2rad\n\n```\n## Concept:\nApplication as a database\n```python\nForms: # may have main menu (menubar) definitions\n # may be linked to database table\n \n Lines: # form fields(type of data and type of form control) and \n # layout definitions\n # when form is linked to database - database columns definitions\n \n Actions: # applies for database linked forms\n # may be standard CRUD-action \n # or \n # run a script (run reports, forms and etc)\n # or\n # may have linked subforms (one-to-many)\n\nModules: # python scripts\n\nQueries: # query development and debugging tool\n\nReports: # multiformat (HTML, DOCX, XLSX) reporting tool \n```\n',
21
21
  'author': 'Andrei Puchko',
@@ -1 +0,0 @@
1
- __version__ = "0.1.103"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes