djgentelella 0.4.5__py3-none-any.whl → 0.4.7__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.5'
1
+ __version__ = '0.4.7'
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
 
djgentelella/groute.py CHANGED
@@ -18,7 +18,10 @@ def register_lookups(prefix='', basename=None):
18
18
  def decore(klass):
19
19
  if basename in ['userbase', 'groupbase']:
20
20
  from djgentelella import settings
21
- if settings.REGISTER_DEFAULT_USER_API:
21
+ if klass.__module__ == 'djgentelella.gtselects':
22
+ if settings.REGISTER_DEFAULT_USER_API:
23
+ routes.register(prefix, klass, basename=basename)
24
+ else:
22
25
  routes.register(prefix, klass, basename=basename)
23
26
  else:
24
27
  routes.register(prefix, klass, basename=basename)
@@ -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,6 +1,10 @@
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;
4
8
  build_digital_signature = function (instance) {
5
9
 
6
10
  const widgetId = instance.getAttribute("id");
@@ -475,25 +479,77 @@ function responseManageTypeData(instance, err_json_fn, error_text_fn) {
475
479
  }
476
480
  }
477
481
 
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
- };
482
+ class SocketManager {
483
+ constructor(url, signatureManager, instance) {
484
+ this.url=url;
485
+ this.signatureManager=signatureManager;
486
+ this.instance = instance;
487
+
488
+ this.connect();
489
+ }
490
+ connect(){
491
+ socket_manager_instances[this.instance.socket_id] = this.instance;
492
+ if(!socket_connections.hasOwnProperty(this.url)){
493
+ let ws = new WebSocket(this.url);
494
+ ws.onerror=this.fn_error(this);
495
+ ws.onclose=this.fn_close(this);
496
+ ws.onopen=this.fn_open(this);
497
+ ws.onmessage=this.fn_messages(this);
498
+ socket_connections[this.url]=ws;
499
+ }
500
+ }
501
+ fn_error(element){
502
+ return (event) => {
503
+ // console.error("WebSocket error");
504
+ element.signatureManager.hideLoading();
505
+ alertSimple(errorInterpreter(3), gettext("Error"), "error");
506
+ element.signatureManager.socketError = true;
507
+ }
508
+ }
509
+ fn_close(element){
510
+ return (event) => {
511
+ console.warn("WebSocket cerrado "+event.type);
512
+ Reflect.deleteProperty(socket_connections, event.currentTarget.url);
513
+ if(count_close_inicialice < max_close_inicialice){
514
+ count_close_inicialice += 1;
515
+ element.instance.inicialize();
516
+ }
517
+ };
518
+ }
519
+ fn_open(element){
520
+ return (event) => {
521
+ // console.log("WebSocket conectado");
522
+ element.signatureManager.socket_error = false;
523
+ count_close_inicialice=0;
524
+ };
525
+ }
526
+ fn_messages(element){
527
+ return (event)=>{
528
+ try {
529
+ const data = JSON.parse(event.data);
530
+ if (data.hasOwnProperty("socket_id") && socket_manager_instances.hasOwnProperty(data["socket_id"])){
531
+ socket_manager_instances[data["socket_id"]].receive_json(data);
532
+ }else{
533
+ console.error("Socket id not found");
534
+ }
535
+ } catch (err) {
536
+ console.error("Error al parsear mensaje WS:", err);
537
+ }
538
+ };
539
+ }
540
+ send(str){
541
+ if(!socket_connections.hasOwnProperty(this.url)){
542
+ this.connect();
543
+ }else{
544
+ if(socket_connections[this.url].readyState != WebSocket.OPEN){
545
+ Reflect.deleteProperty(socket_connections, this.url);
546
+ this.connect();
547
+ }
548
+ }
549
+ if(socket_connections.hasOwnProperty(this.url)){
550
+ socket_connections[this.url].send(str);
551
+ }
552
+ }
497
553
  }
498
554
 
499
555
  function callFetch(instance) {
@@ -545,6 +601,9 @@ function FirmadorLibreLocal(docmanager, signatureManager) {
545
601
  callFetch(instance);
546
602
  },
547
603
  "sign": function (data) {
604
+ if(data.hasOwnProperty("socket_id")){
605
+ Reflect.deleteProperty(data, "socket_id");
606
+ }
548
607
  let json = JSON.stringify(data);
549
608
  let manager = docmanager;
550
609
 
@@ -585,21 +644,16 @@ function FirmadorLibreLocal(docmanager, signatureManager) {
585
644
  }
586
645
  }
587
646
 
647
+ const generateRandomString = () => {
648
+ return Math.floor(Math.random() * Date.now()).toString(36);
649
+ };
650
+
588
651
  function FirmadorLibreWS(docmanager, url, signatureManager) {
589
652
  var firmador = {
590
653
  "url": url,
591
654
  "websocket": null,
592
655
  "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
- },
656
+ "socket_id": generateRandomString(),
603
657
  "receive_json": function (data) {
604
658
  // validate socket errors
605
659
  if (data.result === false && data.error) {
@@ -663,15 +717,15 @@ function FirmadorLibreWS(docmanager, url, signatureManager) {
663
717
  },
664
718
 
665
719
  "inicialize": function () {
666
- this.websocket = new WebSocket(url);
667
- SocketManager(this.websocket, signatureManager);
668
- this.websocket.onmessage = this.trans_received(this);
720
+ this.websocket = new SocketManager(url, signatureManager, this);
721
+
669
722
  },
670
723
  "local_done": function (data) {
671
724
  // console.log("local_done", data);
672
725
  },
673
726
  "sign": function (data) {
674
727
  data["action"] = "initial_signature";
728
+ data["socket_id"] = this.socket_id;
675
729
  if (data.card !== undefined) {
676
730
  this.websocket.send(JSON.stringify(data));
677
731
  signatureManager.showLoading();
@@ -682,7 +736,7 @@ function FirmadorLibreWS(docmanager, url, signatureManager) {
682
736
  },
683
737
  "complete_sign": function (data) {
684
738
  data["action"] = "complete_signature";
685
-
739
+ data["socket_id"] = this.socket_id;
686
740
  try {
687
741
  this.websocket.send(JSON.stringify(data));
688
742
  } catch (e) {
@@ -2251,6 +2251,10 @@ 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;
2254
2258
  build_digital_signature = function (instance) {
2255
2259
 
2256
2260
  const widgetId = instance.getAttribute("id");
@@ -2725,25 +2729,77 @@ function responseManageTypeData(instance, err_json_fn, error_text_fn) {
2725
2729
  }
2726
2730
  }
2727
2731
 
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
- };
2732
+ class SocketManager {
2733
+ constructor(url, signatureManager, instance) {
2734
+ this.url=url;
2735
+ this.signatureManager=signatureManager;
2736
+ this.instance = instance;
2737
+
2738
+ this.connect();
2739
+ }
2740
+ connect(){
2741
+ socket_manager_instances[this.instance.socket_id] = this.instance;
2742
+ if(!socket_connections.hasOwnProperty(this.url)){
2743
+ let ws = new WebSocket(this.url);
2744
+ ws.onerror=this.fn_error(this);
2745
+ ws.onclose=this.fn_close(this);
2746
+ ws.onopen=this.fn_open(this);
2747
+ ws.onmessage=this.fn_messages(this);
2748
+ socket_connections[this.url]=ws;
2749
+ }
2750
+ }
2751
+ fn_error(element){
2752
+ return (event) => {
2753
+ // console.error("WebSocket error");
2754
+ element.signatureManager.hideLoading();
2755
+ alertSimple(errorInterpreter(3), gettext("Error"), "error");
2756
+ element.signatureManager.socketError = true;
2757
+ }
2758
+ }
2759
+ fn_close(element){
2760
+ return (event) => {
2761
+ console.warn("WebSocket cerrado "+event.type);
2762
+ Reflect.deleteProperty(socket_connections, event.currentTarget.url);
2763
+ if(count_close_inicialice < max_close_inicialice){
2764
+ count_close_inicialice += 1;
2765
+ element.instance.inicialize();
2766
+ }
2767
+ };
2768
+ }
2769
+ fn_open(element){
2770
+ return (event) => {
2771
+ // console.log("WebSocket conectado");
2772
+ element.signatureManager.socket_error = false;
2773
+ count_close_inicialice=0;
2774
+ };
2775
+ }
2776
+ fn_messages(element){
2777
+ return (event)=>{
2778
+ try {
2779
+ const data = JSON.parse(event.data);
2780
+ if (data.hasOwnProperty("socket_id") && socket_manager_instances.hasOwnProperty(data["socket_id"])){
2781
+ socket_manager_instances[data["socket_id"]].receive_json(data);
2782
+ }else{
2783
+ console.error("Socket id not found");
2784
+ }
2785
+ } catch (err) {
2786
+ console.error("Error al parsear mensaje WS:", err);
2787
+ }
2788
+ };
2789
+ }
2790
+ send(str){
2791
+ if(!socket_connections.hasOwnProperty(this.url)){
2792
+ this.connect();
2793
+ }else{
2794
+ if(socket_connections[this.url].readyState != WebSocket.OPEN){
2795
+ Reflect.deleteProperty(socket_connections, this.url);
2796
+ this.connect();
2797
+ }
2798
+ }
2799
+ if(socket_connections.hasOwnProperty(this.url)){
2800
+ socket_connections[this.url].send(str);
2801
+ }
2802
+ }
2747
2803
  }
2748
2804
 
2749
2805
  function callFetch(instance) {
@@ -2795,6 +2851,9 @@ function FirmadorLibreLocal(docmanager, signatureManager) {
2795
2851
  callFetch(instance);
2796
2852
  },
2797
2853
  "sign": function (data) {
2854
+ if(data.hasOwnProperty("socket_id")){
2855
+ Reflect.deleteProperty(data, "socket_id");
2856
+ }
2798
2857
  let json = JSON.stringify(data);
2799
2858
  let manager = docmanager;
2800
2859
 
@@ -2835,21 +2894,16 @@ function FirmadorLibreLocal(docmanager, signatureManager) {
2835
2894
  }
2836
2895
  }
2837
2896
 
2897
+ const generateRandomString = () => {
2898
+ return Math.floor(Math.random() * Date.now()).toString(36);
2899
+ };
2900
+
2838
2901
  function FirmadorLibreWS(docmanager, url, signatureManager) {
2839
2902
  var firmador = {
2840
2903
  "url": url,
2841
2904
  "websocket": null,
2842
2905
  "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
- },
2906
+ "socket_id": generateRandomString(),
2853
2907
  "receive_json": function (data) {
2854
2908
  // validate socket errors
2855
2909
  if (data.result === false && data.error) {
@@ -2913,15 +2967,15 @@ function FirmadorLibreWS(docmanager, url, signatureManager) {
2913
2967
  },
2914
2968
 
2915
2969
  "inicialize": function () {
2916
- this.websocket = new WebSocket(url);
2917
- SocketManager(this.websocket, signatureManager);
2918
- this.websocket.onmessage = this.trans_received(this);
2970
+ this.websocket = new SocketManager(url, signatureManager, this);
2971
+
2919
2972
  },
2920
2973
  "local_done": function (data) {
2921
2974
  // console.log("local_done", data);
2922
2975
  },
2923
2976
  "sign": function (data) {
2924
2977
  data["action"] = "initial_signature";
2978
+ data["socket_id"] = this.socket_id;
2925
2979
  if (data.card !== undefined) {
2926
2980
  this.websocket.send(JSON.stringify(data));
2927
2981
  signatureManager.showLoading();
@@ -2932,7 +2986,7 @@ function FirmadorLibreWS(docmanager, url, signatureManager) {
2932
2986
  },
2933
2987
  "complete_sign": function (data) {
2934
2988
  data["action"] = "complete_signature";
2935
-
2989
+ data["socket_id"] = this.socket_id;
2936
2990
  try {
2937
2991
  this.websocket.send(JSON.stringify(data));
2938
2992
  } catch (e) {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: djgentelella
3
- Version: 0.4.5
3
+ Version: 0.4.7
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,10 +1,10 @@
1
- djgentelella/__init__.py,sha256=Jdpq1v16o6dkt8kZwaeN1H_A8weJUnmeqeqxeTFn2J8,73
1
+ djgentelella/__init__.py,sha256=-FDAIq3Uw8k-kTuiU6tpvyrlwEjRZ-tSnDQwCZaUN14,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
5
5
  djgentelella/elements.py,sha256=tMGzA1pE_PytYgAMJutuaYGsnk4k8y7-Kg_D6F5rV6o,3340
6
6
  djgentelella/exceptions.py,sha256=x321e40KAjqS5cDv7lIc1TEoSYwTw-pHm7eZV_o0xBI,262
7
- djgentelella/groute.py,sha256=EMJhNK9uEziyf4Gz0Q4hoiYCUqVe4PhYOkiNSuqAaq8,646
7
+ djgentelella/groute.py,sha256=FPKKZBfm0UYAfMKmeLGhPBWqPXqazADjt7iKMruVmcE,799
8
8
  djgentelella/gtselects.py,sha256=f8tBg68KQoYYCW1YNZt8PiKmdjItJY2kwN23ScO6nqM,590
9
9
  djgentelella/models.py,sha256=PZGQiIGdDxhkdXAPIXb2tgyDvnnyK6e0ePjRBRJ6Bg4,4560
10
10
  djgentelella/objectmanagement.py,sha256=y_dkSKIOfKKK9t1hZ8mwcM5RNxj0bChpKYvUn50mVzs,3121
@@ -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,7 +142,7 @@ 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=kX6xR3vTK0g1FLdQkaaplv5-g_NuPcqmAXu-tZMOGWg,127681
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
@@ -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=C7rX15LXOSGj3srXRY8dVYT2NHGwjqfYmx8Pb63Q5xg,38479
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
@@ -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.5.dist-info/AUTHORS,sha256=HyQoO-q7oXtavpNm7jaBVv8Vxx3c7yo33xkFkt4blkY,118
1036
- djgentelella-0.4.5.dist-info/LICENSE.txt,sha256=wDzqAntLQORAL6vQhVdzZyfsPVvFStZKtkct5DIZjK0,18047
1037
- djgentelella-0.4.5.dist-info/METADATA,sha256=QYHw_6B8xhxHxsq7lZ_3-ivsTFOE_qGUh6fFpd7_UxI,27544
1038
- djgentelella-0.4.5.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
1039
- djgentelella-0.4.5.dist-info/top_level.txt,sha256=88JbODVPV-P5q7ic25yMHt_FuuizaLzMyIaegpFa7Qk,13
1040
- djgentelella-0.4.5.dist-info/RECORD,,
1035
+ djgentelella-0.4.7.dist-info/AUTHORS,sha256=HyQoO-q7oXtavpNm7jaBVv8Vxx3c7yo33xkFkt4blkY,118
1036
+ djgentelella-0.4.7.dist-info/LICENSE.txt,sha256=wDzqAntLQORAL6vQhVdzZyfsPVvFStZKtkct5DIZjK0,18047
1037
+ djgentelella-0.4.7.dist-info/METADATA,sha256=ODtBafWXW4pBk0mx_86-b8GlagOUnwgBtHXZjk9NeyM,27544
1038
+ djgentelella-0.4.7.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
1039
+ djgentelella-0.4.7.dist-info/top_level.txt,sha256=88JbODVPV-P5q7ic25yMHt_FuuizaLzMyIaegpFa7Qk,13
1040
+ djgentelella-0.4.7.dist-info/RECORD,,