znote 1.3.0__tar.gz → 1.4.0__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.
Files changed (31) hide show
  1. {znote-1.3.0/znote.egg-info → znote-1.4.0}/PKG-INFO +2 -1
  2. {znote-1.3.0 → znote-1.4.0}/README.md +1 -0
  3. {znote-1.3.0 → znote-1.4.0}/znote/client.py +35 -11
  4. {znote-1.3.0 → znote-1.4.0}/znote/server.py +40 -10
  5. {znote-1.3.0 → znote-1.4.0/znote.egg-info}/PKG-INFO +2 -1
  6. {znote-1.3.0 → znote-1.4.0}/LICENSE +0 -0
  7. {znote-1.3.0 → znote-1.4.0}/setup.cfg +0 -0
  8. {znote-1.3.0 → znote-1.4.0}/znote/__init__.py +0 -0
  9. {znote-1.3.0 → znote-1.4.0}/znote/app/display.p +0 -0
  10. {znote-1.3.0 → znote-1.4.0}/znote/app/display.py +0 -0
  11. {znote-1.3.0 → znote-1.4.0}/znote/app/input.py +0 -0
  12. {znote-1.3.0 → znote-1.4.0}/znote/core/auth.py +0 -0
  13. {znote-1.3.0 → znote-1.4.0}/znote/core/client/connect.py +0 -0
  14. {znote-1.3.0 → znote-1.4.0}/znote/core/client/fetch.py +0 -0
  15. {znote-1.3.0 → znote-1.4.0}/znote/core/client/metafile.py +0 -0
  16. {znote-1.3.0 → znote-1.4.0}/znote/core/client/settings.py +0 -0
  17. {znote-1.3.0 → znote-1.4.0}/znote/core/client/token.py +0 -0
  18. {znote-1.3.0 → znote-1.4.0}/znote/core/config.py +0 -0
  19. {znote-1.3.0 → znote-1.4.0}/znote/core/editor.py +0 -0
  20. {znote-1.3.0 → znote-1.4.0}/znote/core/gen.py +0 -0
  21. {znote-1.3.0 → znote-1.4.0}/znote/core/pack.py +0 -0
  22. {znote-1.3.0 → znote-1.4.0}/znote/core/server/note.py +0 -0
  23. {znote-1.3.0 → znote-1.4.0}/znote/core/server/settings.py +0 -0
  24. {znote-1.3.0 → znote-1.4.0}/znote/core/workspace.py +0 -0
  25. {znote-1.3.0 → znote-1.4.0}/znote/main.py +0 -0
  26. {znote-1.3.0 → znote-1.4.0}/znote/model/models.py +0 -0
  27. {znote-1.3.0 → znote-1.4.0}/znote.egg-info/SOURCES.txt +0 -0
  28. {znote-1.3.0 → znote-1.4.0}/znote.egg-info/dependency_links.txt +0 -0
  29. {znote-1.3.0 → znote-1.4.0}/znote.egg-info/entry_points.txt +0 -0
  30. {znote-1.3.0 → znote-1.4.0}/znote.egg-info/requires.txt +0 -0
  31. {znote-1.3.0 → znote-1.4.0}/znote.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: znote
3
- Version: 1.3.0
3
+ Version: 1.4.0
4
4
  Summary: Vault de prise de note
5
5
  Author:
6
6
  License: mit
@@ -168,6 +168,7 @@ La fonctionnalité de "channel" permet de synchroniser des fichiers entre plus
168
168
  | `channel <nom> --tree` | Affiche l'arborescence et la liste des fichiers contenus dans le channel. | `znote channel mon-canal --tree` |
169
169
  | `publish <channel> <fichier>` | Publie un fichier sur un channel. Si le fichier existe déjà, il est mis à jour. | `znote publish mon-canal ./rapport.pdf` |
170
170
  | `publish <channel> --purge` | Supprime les fichiers du channel qui ne sont pas présents dans la publication actuelle. | `znote publish mon-canal --purge` |
171
+ | `unpublish <channel>` | Supprime un channel. | `znote unpublish mon-canal` |
171
172
  | `fetch <channel> (<path>)` | Récupère (télécharge) tous les fichiers d'un channel dans le répertoire local. | `znote fetch mon-canal` |
172
173
  | `fetch <channel> --force` | Force le téléchargement et l'écrasement des fichiers locaux même s'ils existent déjà. | `znote fetch mon-canal --force` |
173
174
  | `fetch <channel> --purge` | Supprime les fichiers locaux qui ne sont pas présent dans le channel. | `znote fetch mon-canal --purge` |
@@ -138,6 +138,7 @@ La fonctionnalité de "channel" permet de synchroniser des fichiers entre plusie
138
138
  | `channel <nom> --tree` | Affiche l'arborescence et la liste des fichiers contenus dans le channel. | `znote channel mon-canal --tree` |
139
139
  | `publish <channel> <fichier>` | Publie un fichier sur un channel. Si le fichier existe déjà, il est mis à jour. | `znote publish mon-canal ./rapport.pdf` |
140
140
  | `publish <channel> --purge` | Supprime les fichiers du channel qui ne sont pas présents dans la publication actuelle. | `znote publish mon-canal --purge` |
141
+ | `unpublish <channel>` | Supprime un channel. | `znote unpublish mon-canal` |
141
142
  | `fetch <channel> (<path>)` | Récupère (télécharge) tous les fichiers d'un channel dans le répertoire local. | `znote fetch mon-canal` |
142
143
  | `fetch <channel> --force` | Force le téléchargement et l'écrasement des fichiers locaux même s'ils existent déjà. | `znote fetch mon-canal --force` |
143
144
  | `fetch <channel> --purge` | Supprime les fichiers locaux qui ne sont pas présent dans le channel. | `znote fetch mon-canal --purge` |
@@ -44,23 +44,38 @@ class Client():
44
44
 
45
45
  #Réception des données
46
46
  @impmagic.loader(
47
- {'module': 'select'}
47
+ {'module': 'select'},
48
+ {'module': 'time'}
48
49
  )
49
50
  def receive(self):
50
51
  data = b""
51
- while True:
52
- #Pour éviter les exceptions avec le socket non bloquant
53
- #ready_to_read, _, _ = select.select([self.connexion], [], [], 1)
54
- #if ready_to_read:
55
- chunk = self.connexion.recv(2048)
56
52
 
57
- if chunk and len(chunk)<2048:
58
- return data+chunk
53
+ #Boucle pour récupérer l'ensemble des chunk d'un message
54
+ while True:
55
+ #Pour éviter les exceptions avec le socket non
56
+ #A voir si ça crash pas si on reçoit de gros fichiers
57
+ ready_to_read, _, _ = select.select([self.connexion], [], [], 1)
58
+ if ready_to_read:
59
+ chunk = self.connexion.recv(2048)
60
+
61
+ if len(chunk):
62
+ if not chunk.endswith(b'EOF'):
63
+ data += chunk
64
+ else:
65
+ return data+chunk[:-3]
66
+ else:
67
+ time.sleep(0.2)
68
+ """
69
+ if chunk:
70
+ print(chunk)
71
+ if chunk and len(chunk)<2048:
72
+ return data+chunk
59
73
 
60
- if not chunk:
61
- return data
74
+ if not chunk:
75
+ return data
62
76
 
63
- data += chunk
77
+ data += chunk
78
+ """
64
79
 
65
80
 
66
81
  @impmagic.loader(
@@ -479,6 +494,15 @@ class Client():
479
494
  if len(parameter)>2:
480
495
  command['path'] = parameter[2]
481
496
 
497
+ elif instruction=="unpublish":
498
+ if len(parameter)>1:
499
+ command = {
500
+ 'method': 'channel',
501
+ 'action': 'unpublish',
502
+ 'channel_name': parameter[1],
503
+ 'token': __main__.settings.token
504
+ }
505
+
482
506
  elif instruction=="publish":
483
507
  channel_name = parameter[1]
484
508
  path = parameter[2]
@@ -120,7 +120,7 @@ class ThreadClient(threading.Thread):
120
120
  message_cipher = iv + sym_key_encrypted + ciphertext
121
121
 
122
122
  try:
123
- self.connexion.send(message_cipher)
123
+ self.connexion.send(message_cipher + b'EOF')
124
124
  except:
125
125
  logs(f"[Thread:{self.name}] - Echec de l'envoi", "error")
126
126
  self.kill_thread()
@@ -128,7 +128,8 @@ class ThreadClient(threading.Thread):
128
128
 
129
129
  #Réception des données
130
130
  @impmagic.loader(
131
- {'module': 'select'}
131
+ {'module': 'select'},
132
+ {'module': 'time'}
132
133
  )
133
134
  def receive(self):
134
135
  data = b""
@@ -141,10 +142,13 @@ class ThreadClient(threading.Thread):
141
142
  if ready_to_read:
142
143
  chunk = self.connexion.recv(2048)
143
144
 
144
- while not chunk.endswith(b'EOF'):
145
- data += chunk
146
-
147
- return data+chunk[:-3]
145
+ if len(chunk):
146
+ if not chunk.endswith(b'EOF'):
147
+ data += chunk
148
+ else:
149
+ return data+chunk[:-3]
150
+ else:
151
+ time.sleep(0.2)
148
152
  """
149
153
  if chunk:
150
154
  print(chunk)
@@ -238,13 +242,13 @@ class ThreadClient(threading.Thread):
238
242
 
239
243
  logs(f"[{self.get_name_user()}] - Clé public reçu")
240
244
  payload = {'method': 'sendKey', 'content': __main__.settings.PubKey.decode()}
241
- self.connexion.send(self.encrypt(json.dumps(payload).encode()))
245
+ self.connexion.send(self.encrypt(json.dumps(payload).encode()) + b'EOF')
242
246
  logs(f"[{self.get_name_user()}] - Connecté")
243
247
 
244
248
  else:
245
249
  logs(f'[{self.get_name_user()}] - Clé public invalide', 'error')
246
250
  self.key=None
247
- self.connexion.send("00000")
251
+ self.connexion.send("00000" + b'EOF')
248
252
 
249
253
  elif msgClient['method']=="welcome": #Récupération de la clé publique du client grâce au token
250
254
  logs(f"[{self.get_name_user()}] - Welcome")
@@ -274,7 +278,7 @@ class ThreadClient(threading.Thread):
274
278
  payload = {'method': 'welcome', 'message': 'Bad request', 'status': 0}
275
279
  logs(f"[{self.get_name_user()}] - Bad request", "error")
276
280
 
277
- self.connexion.send(self.encrypt(json.dumps(payload).encode()))
281
+ self.connexion.send(self.encrypt(json.dumps(payload).encode()) + b'EOF')
278
282
 
279
283
 
280
284
  elif self.key!=None:
@@ -717,7 +721,33 @@ class ThreadClient(threading.Thread):
717
721
  payload = {'method': 'channel', 'action': 'tree', 'list_files': list_files}
718
722
 
719
723
  else:
720
- payload = {'method': 'notify', 'message': f"channel {message['channel_name']} introuvable", 'status_code': 'error'}
724
+ payload = {'method': 'notify', 'message': f"channel {message['channel_name']} introuvable", 'status_code': 'error'}
725
+
726
+ elif message['action'] == "unpublish":
727
+ if "channel_name" in message:
728
+ channel = __main__.settings.orm.Channel.get(name=message['channel_name'])
729
+ if channel:
730
+ channel_id = channel.id
731
+
732
+ # Supprimer les publications liées
733
+ query = __main__.settings.orm.PubChannel.select(lambda p: p.channel_id == channel_id)
734
+ for pub in query:
735
+ pub.delete()
736
+
737
+ # Supprimer le channel
738
+ channel.delete()
739
+
740
+ pony.commit()
741
+
742
+ logs(f"[{self.get_name_user()}] - channel: {message['channel_name']} supprimé avec ses publications", "success")
743
+ payload = {'method': 'notify', 'message': f"channel {message['channel_name']} supprimé", 'status_code': 'success'}
744
+ else:
745
+ logs(f"[{self.get_name_user()}] - channel: {message['channel_name']} introuvable pour suppression", "error")
746
+ payload = {'method': 'notify', 'message': f"channel {message['channel_name']} introuvable", 'status_code': 'error'}
747
+ else:
748
+ logs(f"[{self.get_name_user()}] - 'channel_name' manquant pour unpublish", "error")
749
+ payload = {'method': 'notify', 'message': "'channel_name' manquant pour unpublish", 'status_code': 'error'}
750
+
721
751
 
722
752
 
723
753
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: znote
3
- Version: 1.3.0
3
+ Version: 1.4.0
4
4
  Summary: Vault de prise de note
5
5
  Author:
6
6
  License: mit
@@ -168,6 +168,7 @@ La fonctionnalité de "channel" permet de synchroniser des fichiers entre plus
168
168
  | `channel <nom> --tree` | Affiche l'arborescence et la liste des fichiers contenus dans le channel. | `znote channel mon-canal --tree` |
169
169
  | `publish <channel> <fichier>` | Publie un fichier sur un channel. Si le fichier existe déjà, il est mis à jour. | `znote publish mon-canal ./rapport.pdf` |
170
170
  | `publish <channel> --purge` | Supprime les fichiers du channel qui ne sont pas présents dans la publication actuelle. | `znote publish mon-canal --purge` |
171
+ | `unpublish <channel>` | Supprime un channel. | `znote unpublish mon-canal` |
171
172
  | `fetch <channel> (<path>)` | Récupère (télécharge) tous les fichiers d'un channel dans le répertoire local. | `znote fetch mon-canal` |
172
173
  | `fetch <channel> --force` | Force le téléchargement et l'écrasement des fichiers locaux même s'ils existent déjà. | `znote fetch mon-canal --force` |
173
174
  | `fetch <channel> --purge` | Supprime les fichiers locaux qui ne sont pas présent dans le channel. | `znote fetch mon-canal --purge` |
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes