djgentelella 0.4.6__py3-none-any.whl → 0.4.8__py3-none-any.whl

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.
djgentelella/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = '0.4.6'
1
+ __version__ = '0.4.8'
2
2
 
3
3
  if __name__ == '__main__':
4
4
  print(__version__)
@@ -38,16 +38,18 @@ class SignConsumer(JsonWebsocketConsumer):
38
38
 
39
39
  def disconnect(self, close_code):
40
40
  super().disconnect(close_code)
41
+ logger.info(f"Disconnect {close_code}")
41
42
 
42
43
  def receive_json(self, content, **kwargs):
43
44
  """
44
45
  Called with decoded JSON content.
45
46
  """
47
+ socket_id = ""
46
48
  try:
47
49
  serializer = self.get_serializer(content)
48
50
 
49
51
  if serializer.is_valid():
50
-
52
+ socket_id = serializer.validated_data['socket_id']
51
53
  match serializer.validated_data["action"]:
52
54
  case "initial_signature":
53
55
  self.do_initial_signature(serializer)
@@ -63,6 +65,7 @@ class SignConsumer(JsonWebsocketConsumer):
63
65
  "details": serializer.errors,
64
66
  "status": 400,
65
67
  "code": 11,
68
+ 'socket_id': serializer.data.get('socket_id')
66
69
  })
67
70
  logger.error("Invalid request.")
68
71
 
@@ -74,6 +77,7 @@ class SignConsumer(JsonWebsocketConsumer):
74
77
  "details": str(e),
75
78
  "status": 500,
76
79
  "code": 999,
80
+ "socket_id": socket_id
77
81
  })
78
82
  logger.error("An unexpected error occurred.", exc_info=e)
79
83
 
@@ -87,6 +91,8 @@ class SignConsumer(JsonWebsocketConsumer):
87
91
  docsettings=serializer.validated_data["docsettings"],
88
92
  )
89
93
 
94
+ response['socket_id'] = serializer.validated_data['socket_id']
95
+
90
96
  # remove signer image
91
97
  if "imageIcon" in response:
92
98
  del response["imageIcon"]
@@ -103,7 +109,8 @@ class SignConsumer(JsonWebsocketConsumer):
103
109
  signer = RemoteSignerClient(self.scope["user"])
104
110
  data = dict(serializer.validated_data)
105
111
  response = signer.complete_signature(data)
106
- self.send_json({"result": response})
112
+ self.send_json({"result": response,
113
+ 'socket_id': serializer.validated_data['socket_id']})
107
114
  except Exception as e:
108
115
  logger.error("Complete the signature fail", exc_info=e)
109
116
 
@@ -69,7 +69,8 @@ class RequestInitialDoc(serializers.Serializer):
69
69
 
70
70
 
71
71
  class WSRequest(serializers.Serializer):
72
- action = serializers.CharField()
72
+ action = serializers.CharField(required=True)
73
+ socket_id = serializers.CharField(required=True)
73
74
 
74
75
 
75
76
  class CardSerializer(serializers.Serializer):
@@ -88,6 +89,7 @@ class SignatureSerializer(serializers.Serializer):
88
89
 
89
90
  class InitialSignatureSerializer(serializers.Serializer):
90
91
  action = serializers.CharField()
92
+ socket_id = serializers.CharField(required=True)
91
93
  docsettings = DocumentSettingsSerializer()
92
94
  card = CardSerializer()
93
95
  logo_url = serializers.CharField(required=False, allow_null=True, allow_blank=True)
@@ -96,6 +98,7 @@ class InitialSignatureSerializer(serializers.Serializer):
96
98
 
97
99
  class CompleteSignatureSerializer(serializers.Serializer):
98
100
  action = serializers.CharField()
101
+ socket_id = serializers.CharField(required=True)
99
102
  documentid = serializers.CharField()
100
103
  certificate = serializers.CharField()
101
104
  signature = SignatureSerializer()
@@ -1,10 +1,36 @@
1
1
  ///////////////////////////////////////////////
2
2
  // Init widgets digital signature
3
3
  ///////////////////////////////////////////////
4
+ var socket_connections = {};
5
+ var socket_manager_instances = {};
6
+ const max_close_inicialice = 5;
7
+ var count_close_inicialice=0;
8
+
9
+ // Configuración del MutationObserver
10
+ const observer = new MutationObserver((mutations) => {
11
+ mutations.forEach((mutation) => {
12
+ if (mutation.type === 'attributes' && mutation.attributeName === 'data-port') {
13
+ let port = mutation.target.getAttribute('data-port');
14
+ mutation.target.setAttribute("href",
15
+ "firmador:" + window.location.protocol + "//" + window.location.host + "#" + port);
16
+ }
17
+ });
18
+ });
19
+
20
+ build_cors_headers = function(instance){
21
+ let port = instance.getAttribute('data-port');
22
+ instance.setAttribute("href", "firmador:" + window.location.protocol + "//" + window.location.host + "#" + port);
23
+ observer.observe(instance, { attributes: true });
24
+ }
25
+
26
+ build_ws_url = function(base){
27
+ return base;
28
+ }
29
+
4
30
  build_digital_signature = function (instance) {
5
31
 
6
32
  const widgetId = instance.getAttribute("id");
7
- const url_ws = instance.getAttribute("data-ws-url");
33
+ const url_ws = build_ws_url(instance.getAttribute("data-ws-url"));
8
34
  const container = instance.closest(".widget-digital-signature");
9
35
  const container_tag = `container-${widgetId}`;
10
36
  const doc_instance = {
@@ -475,25 +501,77 @@ function responseManageTypeData(instance, err_json_fn, error_text_fn) {
475
501
  }
476
502
  }
477
503
 
478
- function SocketManager(socket, signatureManager) {
479
- // If an error occurs during the connection
480
- socket.onerror = (event) => {
481
- // console.error("WebSocket error");
482
- signatureManager.hideLoading();
483
- alertSimple(errorInterpreter(3), gettext("Error"), "error");
484
- signatureManager.socketError = true;
485
- };
486
-
487
- // If the connection is closed
488
- socket.onclose = (event) => {
489
- // console.warn("WebSocket cerrado");
490
- };
491
-
492
- // If the connection is opened
493
- socket.onopen = (event) => {
494
- // console.log("WebSocket conectado");
495
- signatureManager.socket_error = false;
496
- };
504
+ class SocketManager {
505
+ constructor(url, signatureManager, instance) {
506
+ this.url=url;
507
+ this.signatureManager=signatureManager;
508
+ this.instance = instance;
509
+
510
+ this.connect();
511
+ }
512
+ connect(){
513
+ socket_manager_instances[this.instance.socket_id] = this.instance;
514
+ if(!socket_connections.hasOwnProperty(this.url)){
515
+ let ws = new WebSocket(this.url);
516
+ ws.onerror=this.fn_error(this);
517
+ ws.onclose=this.fn_close(this);
518
+ ws.onopen=this.fn_open(this);
519
+ ws.onmessage=this.fn_messages(this);
520
+ socket_connections[this.url]=ws;
521
+ }
522
+ }
523
+ fn_error(element){
524
+ return (event) => {
525
+ // console.error("WebSocket error");
526
+ element.signatureManager.hideLoading();
527
+ alertSimple(errorInterpreter(3), gettext("Error"), "error");
528
+ element.signatureManager.socketError = true;
529
+ }
530
+ }
531
+ fn_close(element){
532
+ return (event) => {
533
+ console.warn("WebSocket cerrado "+event.type);
534
+ Reflect.deleteProperty(socket_connections, event.currentTarget.url);
535
+ if(count_close_inicialice < max_close_inicialice){
536
+ count_close_inicialice += 1;
537
+ element.instance.inicialize();
538
+ }
539
+ };
540
+ }
541
+ fn_open(element){
542
+ return (event) => {
543
+ // console.log("WebSocket conectado");
544
+ element.signatureManager.socket_error = false;
545
+ count_close_inicialice=0;
546
+ };
547
+ }
548
+ fn_messages(element){
549
+ return (event)=>{
550
+ try {
551
+ const data = JSON.parse(event.data);
552
+ if (data.hasOwnProperty("socket_id") && socket_manager_instances.hasOwnProperty(data["socket_id"])){
553
+ socket_manager_instances[data["socket_id"]].receive_json(data);
554
+ }else{
555
+ console.error("Socket id not found");
556
+ }
557
+ } catch (err) {
558
+ console.error("Error al parsear mensaje WS:", err);
559
+ }
560
+ };
561
+ }
562
+ send(str){
563
+ if(!socket_connections.hasOwnProperty(this.url)){
564
+ this.connect();
565
+ }else{
566
+ if(socket_connections[this.url].readyState != WebSocket.OPEN){
567
+ Reflect.deleteProperty(socket_connections, this.url);
568
+ this.connect();
569
+ }
570
+ }
571
+ if(socket_connections.hasOwnProperty(this.url)){
572
+ socket_connections[this.url].send(str);
573
+ }
574
+ }
497
575
  }
498
576
 
499
577
  function callFetch(instance) {
@@ -545,6 +623,9 @@ function FirmadorLibreLocal(docmanager, signatureManager) {
545
623
  callFetch(instance);
546
624
  },
547
625
  "sign": function (data) {
626
+ if(data.hasOwnProperty("socket_id")){
627
+ Reflect.deleteProperty(data, "socket_id");
628
+ }
548
629
  let json = JSON.stringify(data);
549
630
  let manager = docmanager;
550
631
 
@@ -585,21 +666,16 @@ function FirmadorLibreLocal(docmanager, signatureManager) {
585
666
  }
586
667
  }
587
668
 
669
+ const generateRandomString = () => {
670
+ return Math.floor(Math.random() * Date.now()).toString(36);
671
+ };
672
+
588
673
  function FirmadorLibreWS(docmanager, url, signatureManager) {
589
674
  var firmador = {
590
675
  "url": url,
591
676
  "websocket": null,
592
677
  "firmador_url": "http://localhost:3516",
593
- "trans_received": function (instance) {
594
- return function (event) {
595
- try {
596
- const data = JSON.parse(event.data);
597
- instance.receive_json(data);
598
- } catch (err) {
599
- console.error("Error al parsear mensaje WS:", err);
600
- }
601
- };
602
- },
678
+ "socket_id": generateRandomString(),
603
679
  "receive_json": function (data) {
604
680
  // validate socket errors
605
681
  if (data.result === false && data.error) {
@@ -663,15 +739,15 @@ function FirmadorLibreWS(docmanager, url, signatureManager) {
663
739
  },
664
740
 
665
741
  "inicialize": function () {
666
- this.websocket = new WebSocket(url);
667
- SocketManager(this.websocket, signatureManager);
668
- this.websocket.onmessage = this.trans_received(this);
742
+ this.websocket = new SocketManager(url, signatureManager, this);
743
+
669
744
  },
670
745
  "local_done": function (data) {
671
746
  // console.log("local_done", data);
672
747
  },
673
748
  "sign": function (data) {
674
749
  data["action"] = "initial_signature";
750
+ data["socket_id"] = this.socket_id;
675
751
  if (data.card !== undefined) {
676
752
  this.websocket.send(JSON.stringify(data));
677
753
  signatureManager.showLoading();
@@ -682,7 +758,7 @@ function FirmadorLibreWS(docmanager, url, signatureManager) {
682
758
  },
683
759
  "complete_sign": function (data) {
684
760
  data["action"] = "complete_signature";
685
-
761
+ data["socket_id"] = this.socket_id;
686
762
  try {
687
763
  this.websocket.send(JSON.stringify(data));
688
764
  } catch (e) {
@@ -2251,10 +2251,36 @@ function getMediaRecord(element, mediatype){
2251
2251
  ///////////////////////////////////////////////
2252
2252
  // Init widgets digital signature
2253
2253
  ///////////////////////////////////////////////
2254
+ var socket_connections = {};
2255
+ var socket_manager_instances = {};
2256
+ const max_close_inicialice = 5;
2257
+ var count_close_inicialice=0;
2258
+
2259
+ // Configuración del MutationObserver
2260
+ const observer = new MutationObserver((mutations) => {
2261
+ mutations.forEach((mutation) => {
2262
+ if (mutation.type === 'attributes' && mutation.attributeName === 'data-port') {
2263
+ let port = mutation.target.getAttribute('data-port');
2264
+ mutation.target.setAttribute("href",
2265
+ "firmador:" + window.location.protocol + "//" + window.location.host + "#" + port);
2266
+ }
2267
+ });
2268
+ });
2269
+
2270
+ build_cors_headers = function(instance){
2271
+ let port = instance.getAttribute('data-port');
2272
+ instance.setAttribute("href", "firmador:" + window.location.protocol + "//" + window.location.host + "#" + port);
2273
+ observer.observe(instance, { attributes: true });
2274
+ }
2275
+
2276
+ build_ws_url = function(base){
2277
+ return base;
2278
+ }
2279
+
2254
2280
  build_digital_signature = function (instance) {
2255
2281
 
2256
2282
  const widgetId = instance.getAttribute("id");
2257
- const url_ws = instance.getAttribute("data-ws-url");
2283
+ const url_ws = build_ws_url(instance.getAttribute("data-ws-url"));
2258
2284
  const container = instance.closest(".widget-digital-signature");
2259
2285
  const container_tag = `container-${widgetId}`;
2260
2286
  const doc_instance = {
@@ -2725,25 +2751,77 @@ function responseManageTypeData(instance, err_json_fn, error_text_fn) {
2725
2751
  }
2726
2752
  }
2727
2753
 
2728
- function SocketManager(socket, signatureManager) {
2729
- // If an error occurs during the connection
2730
- socket.onerror = (event) => {
2731
- // console.error("WebSocket error");
2732
- signatureManager.hideLoading();
2733
- alertSimple(errorInterpreter(3), gettext("Error"), "error");
2734
- signatureManager.socketError = true;
2735
- };
2736
-
2737
- // If the connection is closed
2738
- socket.onclose = (event) => {
2739
- // console.warn("WebSocket cerrado");
2740
- };
2741
-
2742
- // If the connection is opened
2743
- socket.onopen = (event) => {
2744
- // console.log("WebSocket conectado");
2745
- signatureManager.socket_error = false;
2746
- };
2754
+ class SocketManager {
2755
+ constructor(url, signatureManager, instance) {
2756
+ this.url=url;
2757
+ this.signatureManager=signatureManager;
2758
+ this.instance = instance;
2759
+
2760
+ this.connect();
2761
+ }
2762
+ connect(){
2763
+ socket_manager_instances[this.instance.socket_id] = this.instance;
2764
+ if(!socket_connections.hasOwnProperty(this.url)){
2765
+ let ws = new WebSocket(this.url);
2766
+ ws.onerror=this.fn_error(this);
2767
+ ws.onclose=this.fn_close(this);
2768
+ ws.onopen=this.fn_open(this);
2769
+ ws.onmessage=this.fn_messages(this);
2770
+ socket_connections[this.url]=ws;
2771
+ }
2772
+ }
2773
+ fn_error(element){
2774
+ return (event) => {
2775
+ // console.error("WebSocket error");
2776
+ element.signatureManager.hideLoading();
2777
+ alertSimple(errorInterpreter(3), gettext("Error"), "error");
2778
+ element.signatureManager.socketError = true;
2779
+ }
2780
+ }
2781
+ fn_close(element){
2782
+ return (event) => {
2783
+ console.warn("WebSocket cerrado "+event.type);
2784
+ Reflect.deleteProperty(socket_connections, event.currentTarget.url);
2785
+ if(count_close_inicialice < max_close_inicialice){
2786
+ count_close_inicialice += 1;
2787
+ element.instance.inicialize();
2788
+ }
2789
+ };
2790
+ }
2791
+ fn_open(element){
2792
+ return (event) => {
2793
+ // console.log("WebSocket conectado");
2794
+ element.signatureManager.socket_error = false;
2795
+ count_close_inicialice=0;
2796
+ };
2797
+ }
2798
+ fn_messages(element){
2799
+ return (event)=>{
2800
+ try {
2801
+ const data = JSON.parse(event.data);
2802
+ if (data.hasOwnProperty("socket_id") && socket_manager_instances.hasOwnProperty(data["socket_id"])){
2803
+ socket_manager_instances[data["socket_id"]].receive_json(data);
2804
+ }else{
2805
+ console.error("Socket id not found");
2806
+ }
2807
+ } catch (err) {
2808
+ console.error("Error al parsear mensaje WS:", err);
2809
+ }
2810
+ };
2811
+ }
2812
+ send(str){
2813
+ if(!socket_connections.hasOwnProperty(this.url)){
2814
+ this.connect();
2815
+ }else{
2816
+ if(socket_connections[this.url].readyState != WebSocket.OPEN){
2817
+ Reflect.deleteProperty(socket_connections, this.url);
2818
+ this.connect();
2819
+ }
2820
+ }
2821
+ if(socket_connections.hasOwnProperty(this.url)){
2822
+ socket_connections[this.url].send(str);
2823
+ }
2824
+ }
2747
2825
  }
2748
2826
 
2749
2827
  function callFetch(instance) {
@@ -2795,6 +2873,9 @@ function FirmadorLibreLocal(docmanager, signatureManager) {
2795
2873
  callFetch(instance);
2796
2874
  },
2797
2875
  "sign": function (data) {
2876
+ if(data.hasOwnProperty("socket_id")){
2877
+ Reflect.deleteProperty(data, "socket_id");
2878
+ }
2798
2879
  let json = JSON.stringify(data);
2799
2880
  let manager = docmanager;
2800
2881
 
@@ -2835,21 +2916,16 @@ function FirmadorLibreLocal(docmanager, signatureManager) {
2835
2916
  }
2836
2917
  }
2837
2918
 
2919
+ const generateRandomString = () => {
2920
+ return Math.floor(Math.random() * Date.now()).toString(36);
2921
+ };
2922
+
2838
2923
  function FirmadorLibreWS(docmanager, url, signatureManager) {
2839
2924
  var firmador = {
2840
2925
  "url": url,
2841
2926
  "websocket": null,
2842
2927
  "firmador_url": "http://localhost:3516",
2843
- "trans_received": function (instance) {
2844
- return function (event) {
2845
- try {
2846
- const data = JSON.parse(event.data);
2847
- instance.receive_json(data);
2848
- } catch (err) {
2849
- console.error("Error al parsear mensaje WS:", err);
2850
- }
2851
- };
2852
- },
2928
+ "socket_id": generateRandomString(),
2853
2929
  "receive_json": function (data) {
2854
2930
  // validate socket errors
2855
2931
  if (data.result === false && data.error) {
@@ -2913,15 +2989,15 @@ function FirmadorLibreWS(docmanager, url, signatureManager) {
2913
2989
  },
2914
2990
 
2915
2991
  "inicialize": function () {
2916
- this.websocket = new WebSocket(url);
2917
- SocketManager(this.websocket, signatureManager);
2918
- this.websocket.onmessage = this.trans_received(this);
2992
+ this.websocket = new SocketManager(url, signatureManager, this);
2993
+
2919
2994
  },
2920
2995
  "local_done": function (data) {
2921
2996
  // console.log("local_done", data);
2922
2997
  },
2923
2998
  "sign": function (data) {
2924
2999
  data["action"] = "initial_signature";
3000
+ data["socket_id"] = this.socket_id;
2925
3001
  if (data.card !== undefined) {
2926
3002
  this.websocket.send(JSON.stringify(data));
2927
3003
  signatureManager.showLoading();
@@ -2932,7 +3008,7 @@ function FirmadorLibreWS(docmanager, url, signatureManager) {
2932
3008
  },
2933
3009
  "complete_sign": function (data) {
2934
3010
  data["action"] = "complete_signature";
2935
-
3011
+ data["socket_id"] = this.socket_id;
2936
3012
  try {
2937
3013
  this.websocket.send(JSON.stringify(data));
2938
3014
  } catch (e) {
@@ -306,6 +306,11 @@ document.gtwidgets = {
306
306
  build_digital_signature(e);
307
307
  });
308
308
  },
309
+ FirmadorCORS: function (instance){
310
+ instance.each(function (i, e) {
311
+ build_cors_headers(e);
312
+ });
313
+ }
309
314
  }
310
315
 
311
316
  function gt_find_initialize(instance) {
@@ -125,7 +125,7 @@
125
125
  <li>
126
126
  <a class="small"
127
127
  title="{% trans 'Run Firmador Libre' %}"
128
- href="firmador:{{ widget.attrs.cors }}">
128
+ href="firmador:localhost" data-widget="FirmadorCORS" data-port="3516">
129
129
  {% trans 'Run app' %}
130
130
  <i class="fa fa-cog" aria-hidden="true"></i>
131
131
  </a>
@@ -22,15 +22,13 @@ class DigitalSignatureInput(HiddenInput, ValueDSParser):
22
22
  def is_hidden(self):
23
23
  return True
24
24
 
25
- def __init__(self, attrs=None, extraskwargs=True, ws_url=None, cors=None,
25
+ def __init__(self, attrs=None, extraskwargs=True,
26
26
  title=None, render_basename=None, icon_url=None,
27
27
  extra_render_args=None,
28
28
  default_page="first"):
29
29
  attrs = attrs or {}
30
- attrs['data-ws-url'] = ws_url
31
- attrs['cors'] = cors
32
30
  attrs['title'] = title
33
-
31
+ attrs['data-ws-url'] = settings.FIRMADOR_WS_URL
34
32
  self.render_basename = render_basename
35
33
  self.icon_url = icon_url
36
34
  self.extra_render_args = extra_render_args or []
@@ -40,31 +38,17 @@ class DigitalSignatureInput(HiddenInput, ValueDSParser):
40
38
  if self.render_basename is None:
41
39
  logger.warning(
42
40
  "No base name for DigitalSignatureInput, this will generate a 500 error in the future")
43
- self.validate_attrs(attrs, ws_url, cors, default_page)
41
+ self.validate_attrs(attrs, default_page)
44
42
 
45
43
  if extraskwargs:
46
44
  attrs = update_kwargs(
47
45
  attrs, self.__class__.__name__, )
48
46
  super().__init__(attrs)
49
47
 
50
- def validate_attrs(self, attrs, ws_url, cors, default_page):
51
- if not ws_url:
52
- if not ws_url and settings.FIRMADOR_WS_URL:
53
- attrs['data-ws-url'] = settings.FIRMADOR_WS_URL
54
- else:
55
- raise ValueError(
56
- "Must provide a ws_url in attrs of DigitalSignatureInput.")
57
-
58
- if not cors:
59
- if not cors and settings.FIRMADOR_CORS:
60
- attrs['cors'] = settings.FIRMADOR_CORS
61
- else:
62
- raise ValueError(
63
- "Must provide a cors in attrs of DigitalSignatureInput.")
48
+ def validate_attrs(self, attrs, default_page):
64
49
 
65
50
  if isinstance(default_page, int) and default_page > 0:
66
- attrs['data-default-page'] = str(
67
- default_page)
51
+ attrs['data-default-page'] = str(default_page)
68
52
  elif default_page in ["first", "last"]:
69
53
  attrs['data-default-page'] = default_page
70
54
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: djgentelella
3
- Version: 0.4.6
3
+ Version: 0.4.8
4
4
  Summary: Help building extra widgets for forms and speciall methods to render forms in templates
5
5
  Author-email: Solvosoft <info@solvosoft.com>
6
6
  Maintainer-email: Luis Zarate Montero <luis.zarate@solvosoft.com>
@@ -1,4 +1,4 @@
1
- djgentelella/__init__.py,sha256=1XSKCxRWCYAlvKy0ZadvDp5Sq250jvxn79PQCZSQvvM,73
1
+ djgentelella/__init__.py,sha256=gRAtlaBwC06sP2YcrcTfseRomODWB-ixPo8nyIxm0d4,73
2
2
  djgentelella/admin.py,sha256=hFPWtRyTZWYtuKEv-SZ3r6lHw3aissX0ObqxYmxblY0,1531
3
3
  djgentelella/apps.py,sha256=5VEbpUv4b1Jh7gCRAQCe5TvpakRyndKwafjVj0z-Xfo,153
4
4
  djgentelella/chartjs.py,sha256=iNYoFnaIQoXsYInJFbSE2quWpjmDz5CuMKpVsvt4pRM,8572
@@ -67,7 +67,7 @@ djgentelella/firmador_digital/config/asgi_worker.py,sha256=r8CLU1L04hIZ2xCUb-l0j
67
67
  djgentelella/firmador_digital/config/websocket_urls.py,sha256=tKXVD7N1qyrP_-DBBx0q1Jj5zqpYkC5XduJzwnawMRM,178
68
68
  djgentelella/firmador_digital/consumers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
69
  djgentelella/firmador_digital/consumers/pdf_render.py,sha256=CSfnOK0FJXKyIQ2loyjq4yQFjgwJy-CV3SMt25yyUEY,236
70
- djgentelella/firmador_digital/consumers/sign.py,sha256=EblPlI6J0VKvj5LtQ7jPC_yPBmUo_oYWfAVZE-fxgH0,5089
70
+ djgentelella/firmador_digital/consumers/sign.py,sha256=wGK-b5H2ulOjdgaDPb1aR_ikjR0F54dJlxwRlZIkkoo,5484
71
71
  djgentelella/firmador_digital/gunicorn/config_asgi.py,sha256=PZMb4ELq3Og_9jEET7DeXUYMeTAq8kSEMaKPkAknlH4,469
72
72
  djgentelella/firmador_digital/gunicorn/config_wsgi.py,sha256=GOTN3n90aWTvjNLU_n7DOqlOZ7UH9H4vJ_4cdUM0PHE,539
73
73
  djgentelella/forms/__init__.py,sha256=tsFtaTeLH5pOQrgAVd4xjU6w3rPskn15b9kiW9GZuH8,84
@@ -112,7 +112,7 @@ djgentelella/permission_management/objinterface.py,sha256=b4a_Fa2NsQUNVtQs_2Vbe_
112
112
  djgentelella/permission_management/views.py,sha256=XWaBD3i5kN7ADcbSYz4_Bzq2n0gSaJ7eQ_i9nKLXE_c,2104
113
113
  djgentelella/serializers/__init__.py,sha256=r-pQ1bBd-Y2V5am9Fd9FgPJCacICJvg-xuHqS8shOzQ,1307
114
114
  djgentelella/serializers/calendar.py,sha256=57A9QOcBF6twCLJ4yC2uxhuFtolhDENpZ9Dv0sVWYQs,3461
115
- djgentelella/serializers/firmador_digital.py,sha256=Ry7XaVcTM1E3O3bFmiqKNdfkSUpJ1irq5G3r_FfrrTY,3513
115
+ djgentelella/serializers/firmador_digital.py,sha256=5DVNH5HFShAlc4VUkN5OBEqPMEkTRSPpRS96cfqYODM,3685
116
116
  djgentelella/serializers/helper.py,sha256=xfBZDhI4sE0jRrtcfRFnnNtqtmMpagL2Q2uMkpFvyPQ,248
117
117
  djgentelella/serializers/paginators.py,sha256=1KOC9uHBguc6mT9g-QVRZolE6hIxRm9T4hUhOSa0E8Q,501
118
118
  djgentelella/serializers/selects.py,sha256=91zuRmtCy-ogSuFA_hni1E2U56wnlru8RuHch074llo,1360
@@ -142,12 +142,12 @@ djgentelella/static/gentelella/images/forward_disabled.png,sha256=7enxADzvJa3VzC
142
142
  djgentelella/static/gentelella/images/forward_enabled.png,sha256=vLOxO1qvkBV2ev931iHx-VV63NjrgoTQbwtR4kdVVrA,1380
143
143
  djgentelella/static/gentelella/images/forward_enabled_hover.png,sha256=T6LWiaYzcT2fuJAGEaZGxd8Lok3rlZerlVxiy6d647Q,1379
144
144
  djgentelella/static/gentelella/images/loading.gif,sha256=dyCz9kckQBZKy7DpKpR3hL4xgQgnShbMue3Ao9h_lK0,30269
145
- djgentelella/static/gentelella/js/base.js,sha256=511G19fPkbF-XFgd5D0heRICSIkT8qcfSSVmWAFmhOw,125743
145
+ djgentelella/static/gentelella/js/base.js,sha256=JUaFMKl7ycsb-4NNSTddI3srvN4M_Ppt9b2NlexWvpQ,128476
146
146
  djgentelella/static/gentelella/js/custom.js,sha256=O9GWx1FbkMYzbUSzlYw3SrfZrf9xPdMokPh91xMtdUY,14922
147
147
  djgentelella/static/gentelella/js/datatables.js,sha256=ZmEBPhoj8jDgl_1g14J9tKtiMknyzBekp1_NqAlxjuU,13743
148
148
  djgentelella/static/gentelella/js/obj_api_management.js,sha256=wAVqz9hp5NdJC2dxA_l3mxIeUA2N3fSXuTRADJDCyR4,32127
149
149
  djgentelella/static/gentelella/js/permissionmanagement.js,sha256=Y6n0jRtVr6LVadA3frJ6Ec7FXeuEUS6EsZ2ZgSIj7Y0,8211
150
- djgentelella/static/gentelella/js/widgets.js,sha256=l6nQvotvoMeneNupSXjUqNb6LPKXrMOkQz010e3hRpc,12794
150
+ djgentelella/static/gentelella/js/widgets.js,sha256=aHg5mHWW3ogJOo1v5g5zthFHFQBNkrmBJcw--0UUuXY,12926
151
151
  djgentelella/static/gentelella/js/base/api_list.js,sha256=jhhsWJ9VsZiZiHzusxMqDq9IDPbt14b3u9tTHIgLqvU,3942
152
152
  djgentelella/static/gentelella/js/base/autocompleteSelect2.js,sha256=lAxbjsssMrkUqNRQEM0tKmLzZO1fi50k-kHCXsromGY,1216
153
153
  djgentelella/static/gentelella/js/base/booleanFields.js,sha256=LGBu86uauuX5F1Jq_Z_T6M2R4BRNdRtgiqx20VgYJB0,1573
@@ -155,7 +155,7 @@ djgentelella/static/gentelella/js/base/calendar.js,sha256=gU_AGEWiXX0MSTb9KC6S39
155
155
  djgentelella/static/gentelella/js/base/chart.js,sha256=zXJSd-hrWI-vzc-k_CRFv8Kwa2w0anBIu4Fu8gVuHdA,1567
156
156
  djgentelella/static/gentelella/js/base/custom.widgets.js,sha256=bMcE6gNNn9AABlZNqDDV_rn7Vm3cDp-wtgQ1kmilsJI,5533
157
157
  djgentelella/static/gentelella/js/base/dateranges_gridslider.js,sha256=TGR9Ko9MZVZGhPhe3ubvzMZcEWrlBLH2SA3E239LRyI,5571
158
- djgentelella/static/gentelella/js/base/digital_signature.js,sha256=CsixcVMuqwlmCNVFrbjpUTsRpSx3S2uLcuRqzRsyedQ,36541
158
+ djgentelella/static/gentelella/js/base/digital_signature.js,sha256=G6mgUQr4ojozSw-KxfHCq5wx9mMC0EPIK4uaaUASGpw,39274
159
159
  djgentelella/static/gentelella/js/base/editorTinymce.js,sha256=2fT36ECHyQKLP0X74zYsSHZZ0Rqg-UywDMbG5LjJVac,1118
160
160
  djgentelella/static/gentelella/js/base/fileupload.widget.js,sha256=MIniB9KLE8ozKuDqy5EovrZBbscqEYPMsS70ecgNB1w,10653
161
161
  djgentelella/static/gentelella/js/base/form.common.js,sha256=Jppy687iqyTQrf_MTgCCksdESjuV-TmrcQKGLhGT1kg,9170
@@ -946,7 +946,7 @@ djgentelella/templates/gentelella/widgets/daterange.html,sha256=zD2zqX6PJ7QQ13Ux
946
946
  djgentelella/templates/gentelella/widgets/daterangetime.html,sha256=Ag9z_eHHARgpmoSIJ2MXFyThtQ9bv5bpdTS0yIGu6p4,97
947
947
  djgentelella/templates/gentelella/widgets/datetime.html,sha256=bQ5cQwTzI2bDEV6X3Y8kYuD7Q_eDaX0ypFPEE1-36iU,201
948
948
  djgentelella/templates/gentelella/widgets/datetime_input_mask.html,sha256=iEBUOXNxJHWojdMOUrh41rrC4RZCVLu3MZXB3zaW4nc,94
949
- djgentelella/templates/gentelella/widgets/digital_signature.html,sha256=cnJxzKcFlW4Vqx9uK0fFHAwxMnxpANZJggABXlvm3Wg,7083
949
+ djgentelella/templates/gentelella/widgets/digital_signature.html,sha256=LsKTct6sYDAEZXFAENuz4VF3STDY9FFe5JNmXAnVWpo,7113
950
950
  djgentelella/templates/gentelella/widgets/email.html,sha256=I9LYprz3wsdv__o32aJSYipzw8joukowweIVD7fBXrs,46
951
951
  djgentelella/templates/gentelella/widgets/email_input_mask.html,sha256=iEBUOXNxJHWojdMOUrh41rrC4RZCVLu3MZXB3zaW4nc,94
952
952
  djgentelella/templates/gentelella/widgets/file.html,sha256=RyZ49aJJ-RIIoN5Gk7qadW5qjOEhEZEK6hdTsX-P0iI,1549
@@ -1018,7 +1018,7 @@ djgentelella/views/upload.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
1018
1018
  djgentelella/widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1019
1019
  djgentelella/widgets/calendar.py,sha256=hvQj1EfVuGkZKsLYL2SWHbcihUV0M1hOyxGEf76MGpc,1459
1020
1020
  djgentelella/widgets/core.py,sha256=aUGi0f-iUzXcZDXnvsSv-n7QZTpwiQnJ6NVjwecPNds,22129
1021
- djgentelella/widgets/digital_signature.py,sha256=ZnvZ92E7q_47ezHwpOn10i0HyTud_5PikLzYPiNsPb0,4318
1021
+ djgentelella/widgets/digital_signature.py,sha256=aHxD-H8uVUVsIWgisDv83_Qc5hR2GhQwZx1PhWqdC00,3703
1022
1022
  djgentelella/widgets/files.py,sha256=KBmC1QBbTmhZyTOGiziMuEd865qkMd-HFi-rtsGssc4,2347
1023
1023
  djgentelella/widgets/helper.py,sha256=Q9EFc_ulLCu1VVdsub2m4UkunJW17KNiBncR-SDFj7U,826
1024
1024
  djgentelella/widgets/numberknobinput.py,sha256=bTKJ8fHendEhVhAeZw0jq2PGH_Th6D3EJ9M7IrvG2m4,407
@@ -1032,9 +1032,9 @@ djgentelella/widgets/trees.py,sha256=bV6s-w1cgYahS0aNU6xBrx-aISdlzDZ23BFt3_3hAu4
1032
1032
  djgentelella/widgets/wysiwyg.py,sha256=wHeMyYNVE8-lKJ06A-0DLDAcRNv3TOAOG_Wl9DYZqS0,609
1033
1033
  djgentelella/wysiwyg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1034
1034
  djgentelella/wysiwyg/views.py,sha256=tI7LjLhCnohdvIEOEEhB2Cu1zxRmdcOhYJJX4LBIZaA,1159
1035
- djgentelella-0.4.6.dist-info/AUTHORS,sha256=HyQoO-q7oXtavpNm7jaBVv8Vxx3c7yo33xkFkt4blkY,118
1036
- djgentelella-0.4.6.dist-info/LICENSE.txt,sha256=wDzqAntLQORAL6vQhVdzZyfsPVvFStZKtkct5DIZjK0,18047
1037
- djgentelella-0.4.6.dist-info/METADATA,sha256=T5Kp761lzmXIaKSgud9uDBZmQPaW6o11ryIjlheH19U,27544
1038
- djgentelella-0.4.6.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
1039
- djgentelella-0.4.6.dist-info/top_level.txt,sha256=88JbODVPV-P5q7ic25yMHt_FuuizaLzMyIaegpFa7Qk,13
1040
- djgentelella-0.4.6.dist-info/RECORD,,
1035
+ djgentelella-0.4.8.dist-info/AUTHORS,sha256=HyQoO-q7oXtavpNm7jaBVv8Vxx3c7yo33xkFkt4blkY,118
1036
+ djgentelella-0.4.8.dist-info/LICENSE.txt,sha256=wDzqAntLQORAL6vQhVdzZyfsPVvFStZKtkct5DIZjK0,18047
1037
+ djgentelella-0.4.8.dist-info/METADATA,sha256=CL83r3sDU856JK462UmNRASIb4nzsqLIswEIiW7_j_k,27544
1038
+ djgentelella-0.4.8.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
1039
+ djgentelella-0.4.8.dist-info/top_level.txt,sha256=88JbODVPV-P5q7ic25yMHt_FuuizaLzMyIaegpFa7Qk,13
1040
+ djgentelella-0.4.8.dist-info/RECORD,,