initBasti / Amazon2PlentySync (public) (License: GPLv3) (since 2019-01-27) (hash sha1)
Transfer your data from you Amazon Flatfile spreadsheet over to the Plentymarkets system. How to is included in the readme
List of commits:
Subject Hash Author Date (UTC)
Added an error log system and improved overall workflow 2e3763e436899466db9f03f70ea926869afd3219 Sebastian Fricke 2019-04-18 08:12:27
Added additional feature uploads 528cad4899d3e3adca5098c1a0ce92c2a6b8a853 Sebastian Fricke 2019-04-16 10:25:49
Added an optimization for the initial directory for Linux 58b340605cba0603520ada8a184cc9fba5f8c3b8 Sebastian Fricke 2019-04-16 10:22:18
Fixed a typo in the build script f7943d8b2c33b89b083380902f1b1281366a12b2 Sebastian Fricke 2019-04-16 08:13:51
Added a build script for Linux + removed the finished executables 8fcf82d5de859895d29a7f355c0d49700beb4e38 Sebastian Fricke 2019-04-16 08:10:13
Changed the EAN type from UPC to GTIN_13 which is the correct one. ea74c1d8c001ae6895f07bbecbcb9a0898400b95 Sebastian Fricke 2019-04-15 13:04:54
fixed a bug with item_name + changed the item_name assignment to include the variation name instead of the parent name 7dedb2bb9afac7d5625ccbf9c05f6ff4b1b1e5e1 LagerBadel PC:Magdalena 2019-04-15 12:32:33
Added usage instructions in english and german language. e2f291e2a00ac9283ab9d843e652d7b77fa6bbaf Sebastian Fricke 2019-04-15 09:59:36
Added usage instructions in english and german language. 30646f203ae8847cfa4971cb62187dca8406b8d7 Sebastian Fricke 2019-04-15 09:58:26
Fixed small compilation mistakes concerning positional arguments dc011ec52cf578e2910edde1aeacb893bb2e57f9 Sebastian Fricke 2019-04-15 07:16:14
Fixed a problem with the Upload folder when the executable is within its Folder outside of the root 6ca74a5bbbf13036405c654225de2540cddf2ed0 Sebastian Fricke 2019-04-15 07:02:13
Small improvements with the error handling inside item_upload.py 8d8361aa6ca7fca69407fb6c2f7450a9fd3ad40d LagerBadel PC:Magdalena 2019-04-12 12:31:39
Fixed the Windows Version because of corrupted Sym Links from the Windows Version 21c1d49e6508a27e3ba86741843c4141e09be2ee Sebastian Fricke 2019-04-12 11:57:28
The push from the windows machine corrupted the Linux Version, it is now re compiled. 1a642842228b959ad9ca1253b6e0df25d75e3d67 Sebastian Fricke 2019-04-12 09:34:27
Added a executable File db4d6f812ada2d497e2ffa255ddf62fd88c98e9f Sebastian Fricke 2019-04-12 08:24:14
current working version 10-04-19 f57799f6815c8c76217f64e292d6cf61e0deffb7 Sebastian Fricke 2019-04-10 14:40:36
Changed the collection_name field to the newer seasons field in the property upload b13a2282d20e97f6f414e02ace9673246678adc4 Sebastian Fricke 2019-03-29 09:59:05
Added a feature upload and removed a test print from the barcode upload b04dc65a93ff10c650cdaf48d1a7922ff4769ecc Sebastian Fricke 2019-03-28 14:57:54
Added FNSKU code and removed freetext fields to replace them with properties 4f77496d60be1afbd90a7279b14643267b4430cc Sebastian Fricke 2019-03-27 11:09:55
Added FNSKU code and removed freetext fields to replace them with properties 3d76e8769337dd96fa02503eb242fd192f3c148d Sebastian Fricke 2019-03-27 11:06:41
Commit 2e3763e436899466db9f03f70ea926869afd3219 - Added an error log system and improved overall workflow
Author: Sebastian Fricke
Author date (UTC): 2019-04-18 08:12
Committer name: Sebastian Fricke
Committer date (UTC): 2019-04-18 08:12
Parent(s): 528cad4899d3e3adca5098c1a0ce92c2a6b8a853
Signing key:
Tree: d5cd545e2af0ec8032e5e593358c973e3cb08a14
File Lines added Lines deleted
.gitignore 1 0
clean_upload.sh 4 0
packages/item_upload.py 7 0
packages/log_files.py 43 0
packages/variation_upload.py 36 17
product_import.py 124 17
File .gitignore changed (mode: 100644) (index 934b8d1..a5c176c)
... ... target/
60 60 Upload/ Upload/
61 61 /AmazonToPlenty.sublime-workspace /AmazonToPlenty.sublime-workspace
62 62 /Windows_Version /Windows_Version
63 /Linux_Version
File clean_upload.sh added (mode: 100755) (index 0000000..842a6af)
1 #!/bin/bash
2
3 cd ./Upload/
4 rm *.csv
File packages/item_upload.py changed (mode: 100644) (index cc695c3..1c15612)
... ... except ImportError:
11 11 print("the sortedcontainers module is required to run this program.") print("the sortedcontainers module is required to run this program.")
12 12 raise ImportError raise ImportError
13 13
14 class WrongEncodingException(Exception):
15 pass
16
14 17
15 18 def itemUpload(flatfile, intern, folder): def itemUpload(flatfile, intern, folder):
16 19 # The column headers for the output file as expected from the # The column headers for the output file as expected from the
 
... ... def itemUpload(flatfile, intern, folder):
99 102 row['product_description'], keywords, 'de', row['product_description'], keywords, 'de',
100 103 '', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 9, 1] '', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 9, 1]
101 104
105 except KeyError:
106 raise KeyError
102 107 except Exception as err: except Exception as err:
108 if(str(err).strip("'") == 'feed_product_type'):
109 raise WrongEncodingException("Wrong encoding for this script, please use UTF-8!")
103 110 print(err) print(err)
104 111 print('Error at the Values') print('Error at the Values')
105 112 Data[row['item_sku']] = SortedDict(zip(column_names, values)) Data[row['item_sku']] = SortedDict(zip(column_names, values))
File packages/log_files.py added (mode: 100644) (index 0000000..f6c312d)
1 import os
2 import inspect
3 import logging
4
5 def function_logger(path, file_level, console_level = None):
6 function_name = inspect.stack()[1][3]
7 logger = logging.getLogger(function_name)
8 logger.setLevel(logging.DEBUG) #By default, logs all messages
9
10 if console_level != None:
11 ch = logging.StreamHandler() #StreamHandler logs to console
12 ch.setLevel(console_level)
13 ch_format = logging.Formatter('%(asctime)s - %(message)s')
14 ch.setFormatter(ch_format)
15 logger.addHandler(ch)
16
17 fh = logging.FileHandler(os.path.join(path, 'Error.log'))
18 fh.setLevel(file_level)
19 fh_format = logging.Formatter('%(asctime)s - %(lineno)d - %(levelname)-8s - %(message)s')
20 fh.setFormatter(fh_format)
21 logger.addHandler(fh)
22
23 return logger
24
25 def fileNotFoundLog(log_path, step_number, step_desc, file_name):
26 fileNotFoundLogger = function_logger(log_path, logging.ERROR, logging.ERROR)
27 fileNotFoundLogger.error("ERROR : The required file {2} was not found at Step {0} : {1}"
28 .format(step_number, step_desc, file_name))
29
30 def keyErrorLog(log_path, step_number, step_desc, key_name, file_name):
31 keyErrorLogger = function_logger(log_path, logging.ERROR, logging.ERROR)
32 keyErrorLogger.error("ERROR : There was no match for the key: {2} in the file {3} at Step{0} : {1}"
33 .format(step_number, step_desc, key_name, file_name))
34
35 def wrongEncodingLog(log_path, step_number, step_desc, file_name):
36 wrongEncodingLogger = function_logger(log_path, logging.ERROR, logging.ERROR)
37 wrongEncodingLogger.error("ERROR : The file {2} has symptoms of a different encoding, please use UTF-8. At Step {0} : {1}"
38 .format(step_number, step_desc, file_name))
39
40 def unboundLocalLog(log_path, step_number, step_desc, variable_name, file_name):
41 unboundLocalLogger = function_logger(log_path, logging.ERROR, logging.ERROR)
42 unboundLocalLogger.error("ERROR : In the file {2}, the variable {3} was used before any value was assigned to it.\nAt Step {0} : {1}."
43 .format(step_number, step_desc, file_name, variable_name))
File packages/variation_upload.py changed (mode: 100644) (index 4eaf5b8..b950cb3)
1 1 import csv import csv
2 import re
2 3 from os.path import isfile from os.path import isfile
3 4 import sys import sys
4 5 from tkinter.filedialog import askdirectory from tkinter.filedialog import askdirectory
 
... ... def variationUpload(flatfile, intern_number, folder):
64 65 reader = csv.DictReader(item, delimiter=";") reader = csv.DictReader(item, delimiter=";")
65 66 for row in reader: for row in reader:
66 67 if(row['parent_child'] == 'child'): if(row['parent_child'] == 'child'):
68 pack_height = 0
69 pack_length = 0
70 pack_width = 0
71 pack_weight = 0
67 72 try: try:
68 73 if(row['package_height'] and if(row['package_height'] and
69 74 row['package_length'] and row['package_length'] and
70 75 row['package_width']): row['package_width']):
71 76
72 row['package_height'] = int(row['package_height'])
73 row['package_length'] = int(row['package_length'])
74 row['package_width'] = int(row['package_width'])
77 pack_height = int(row['package_height'])
78 pack_length = int(row['package_length'])
79 pack_width = int(row['package_width'])
75 80 except ValueError as err: except ValueError as err:
76 row['package_height'] = int(float(row['package_height']))
77 row['package_length'] = int(float(row['package_length']))
78 row['package_width'] = int(float(row['package_width']))
79 except ValueError as err:
80 print(err)
81 print(
82 '/nPlease copy the values for height, length, width and weight\n',
83 'from the children to the parent variation in the flatfile.\n')
84 exit()
81 pack_height = int(float(row['package_height']))
82 pack_length = int(float(row['package_length']))
83 pack_width = int(float(row['package_width']))
84 except ValueError:
85 print("\nYour file doesn't include the proportions of the item\n\
86 at the parent, please add them later manually.\n")
87
88 if(row['package_weight']):
89 pack_weight = int(row['package_weight'])
85 90
86 91 if(row['color_name']): if(row['color_name']):
87 92 attributes = 'color_name:' + row['color_name'] attributes = 'color_name:' + row['color_name']
93
88 94 if(row['size_name'] and number_sizes > 1): if(row['size_name'] and number_sizes > 1):
89 95 attributes += ';size_name:' + row['size_name'] attributes += ';size_name:' + row['size_name']
96
90 97 try: try:
91 98 values = ['', '', row['item_sku'], row['item_name'], '', values = ['', '', row['item_sku'], row['item_name'], '',
92 int(row['package_length']) * 10,
93 int(row['package_width']) * 10,
94 int(row['package_height']) * 10,
95 row['package_weight'], attributes,
99 pack_length * 10,
100 pack_width * 10,
101 pack_height * 10,
102 pack_weight, attributes,
96 103 row['standard_price'], 'Badel', 'Y', 'Y', ''] row['standard_price'], 'Badel', 'Y', 'Y', '']
97 104 except Exception as err: except Exception as err:
98 105 print(err) print(err)
99 sys.exit()
100 106 Data[row['item_sku']] = SortedDict(zip(names, values)) Data[row['item_sku']] = SortedDict(zip(names, values))
101 107
102 108 # open the intern numbers csv and fill in the remaining missing fields by using the # open the intern numbers csv and fill in the remaining missing fields by using the
 
... ... def setActive(flatfile, export, folder):
131 137
132 138 with open(export, mode='r') as item: with open(export, mode='r') as item:
133 139 reader = csv.DictReader(item, delimiter=';') reader = csv.DictReader(item, delimiter=';')
140 wrong_delimiter = False
141
134 142 for row in reader: for row in reader:
143 if( '\t' in [*row] ):
144 wrong_delimiter = True
145 break
135 146 if(row['VariationNumber'] in [*Data]): if(row['VariationNumber'] in [*Data]):
136 147 Data[row['VariationNumber']]['VariationID'] = row['VariationID'] Data[row['VariationNumber']]['VariationID'] = row['VariationID']
148
149 if(wrong_delimiter):
150 reader = csv.DictReader(item, delimiter='\t')
151
152 for row in reader:
153 if(row['VariationNumber' in [*Data]]):
154 Data[row['VariationNumber']]['VariationID'] = row['VariationID']
155
137 156 output_path = writeCSV(Data, 'SetActive', column_names, folder) output_path = writeCSV(Data, 'SetActive', column_names, folder)
138 157
139 158
File product_import.py changed (mode: 100644) (index baafc96..6363d0b)
... ... from tkinter.filedialog import askopenfilename, askdirectory
3 3 import sys import sys
4 4 import platform import platform
5 5 import os import os
6 from packages.item_upload import itemUpload, itemPropertyUpload
6 import ntpath
7 from packages.item_upload import itemUpload, itemPropertyUpload, WrongEncodingException
7 8 from packages.variation_upload import variationUpload, setActive, EANUpload, marketConnection from packages.variation_upload import variationUpload, setActive, EANUpload, marketConnection
8 from packages.stock_upload import stockUpload, priceUpload
9 from packages.stock_upload import priceUpload
9 10 from packages.amazon_data_upload import amazonSkuUpload, amazonDataUpload, asinUpload, featureUpload from packages.amazon_data_upload import amazonSkuUpload, amazonDataUpload, asinUpload, featureUpload
10 11 from packages.image_upload import imageUpload from packages.image_upload import imageUpload
12 from packages.log_files import fileNotFoundLog, keyErrorLog, wrongEncodingLog, unboundLocalLog
11 13
12 14
13 15 def main(): def main():
16
17 #define variable used throughout the script
18 upload_folder = ''
19 log_folder = ''
20 recent_path = ''
21 step = int(0)
22 fexc = ''
23 # Create a list of step names where every name fits to the index of a step number
24 step_name = ['environment-creation',
25 'import-flatfile',
26 'import-internlist',
27 'item-upload',
28 'variation-upload',
29 'import-export',
30 'feature_upload',
31 'active_upload',
32 'property_upload',
33 'price_upload',
34 'import_stocklist',
35 'Barcode_upload',
36 'SKU_Upload',
37 'AmazonData_Upload',
38 'ASIN_upload',
39 'Image_upload',
40 'Marketconnection_upload']
41
14 42 #app = UploadGUI(None) #app = UploadGUI(None)
15 43 #app.title("Amazon Flatfile to PlentyMarkets Upload") #app.title("Amazon Flatfile to PlentyMarkets Upload")
16 44 # app.mainloop() # app.mainloop()
 
... ... def main():
29 57 else: else:
30 58 initial_directory = '/home/' + os.getlogin() initial_directory = '/home/' + os.getlogin()
31 59
60
61 # Get the upload folder path from the user
62 upload_folder = askdirectory(initialdir=initial_directory,
63 title="Choose a folder for the upload files.")
64 # Check if there is already a log folder within the upload folder
65 if( not(os.path.exists(os.path.join(upload_folder, 'log'))) ):
66 log_folder = os.path.join(upload_folder, 'log')
67 os.makedirs(log_folder)
68 elif( os.path.exists(os.path.join(upload_folder, 'log')) ):
69 log_folder = os.path.join(upload_folder, 'log')
70
71 step += 1
32 72 sheet = askopenfilename(initialdir=initial_directory, sheet = askopenfilename(initialdir=initial_directory,
33 73 title="Amazon Flatfile as .csv", title="Amazon Flatfile as .csv",
34 74 filetypes=[ ("csv files", "*.csv") ]) filetypes=[ ("csv files", "*.csv") ])
35 intern_number = askopenfilename(initialdir=initial_directory,
75 if(sheet):
76 recent_path = os.path.dirname(sheet)
77
78 step += 1
79 intern_number = askopenfilename(initialdir=recent_path,
36 80 title="The Intern Numbers as .csv", title="The Intern Numbers as .csv",
37 81 filetypes=[ ("csv files", "*.csv") ]) filetypes=[ ("csv files", "*.csv") ])
38 upload_folder = askdirectory(initialdir=initial_directory,
39 title="Choose a folder for the upload files.")
40 82
41 83 print("spreadsheet csv containing the flatfile : ", sheet) print("spreadsheet csv containing the flatfile : ", sheet)
42 84 print("spreadsheet csv containing the intern numbers : ", intern_number) print("spreadsheet csv containing the intern numbers : ", intern_number)
43 85
86 step += 1
44 87 try: try:
45 88 print("\nItem Upload\n") print("\nItem Upload\n")
46 89 itemUpload(sheet, intern_number, upload_folder) itemUpload(sheet, intern_number, upload_folder)
90 except WrongEncodingException as wexc:
91 wrongEncodingLog(log_path=log_folder, step_number=step, step_desc=step_name[step], file_name="flatfile")
92 except KeyError as kexc:
93 keyErrorLog(log_path=log_folder, step_number=step, step_desc=step_name[step], key_name=kexc, file_name=ntpath.basename(sheet))
94 except OSError as fexc:
95 fileNotFoundLog(log_path=log_folder, step_number=step, step_desc=step_name[step], file_name="intern_numbers")
96 except TypeError:
97 fileNotFoundLog(log_path=log_folder, step_number=step, step_desc=step_name[step], file_name="flatfile")
98 except UnboundLocalError as uexc:
99 unboundLocalLog(log_path=log_folder, step_number=step, step_desc=step_name[step], filename=ntpath.basename(sheet), variable_name=uexc.args)
47 100 except Exception as exc: except Exception as exc:
48 101 print("Item Upload failed!\n") print("Item Upload failed!\n")
49 102 print("Here: ", exc, '\n') print("Here: ", exc, '\n')
 
... ... def main():
53 106 for element in e: for element in e:
54 107 print(element) print(element)
55 108
109 step += 1
56 110 try: try:
57 111 print("\nVariation Upload\n") print("\nVariation Upload\n")
58 112 variationUpload(sheet, intern_number, upload_folder) variationUpload(sheet, intern_number, upload_folder)
113 except KeyError as kexc:
114 keyErrorLog(log_path=log_folder, step_number=step, step_desc=step_name[step], key_name=kexc, file_name=ntpath.basename(sheet))
115 except UnboundLocalError as uexc:
116 unboundLocalLog(log_path=log_folder, step_number=step, step_desc=step_name[step], filename=ntpath.basename(sheet), variable_name=uexc.args)
59 117 except Exception as exc: except Exception as exc:
60 118 print("VariationUpload failed!\n") print("VariationUpload failed!\n")
61 119 e = sys.exc_info() e = sys.exc_info()
 
... ... def main():
69 127
70 128 print("\nGet a dataexport from the plentymarket site from the variation attributes, in order to access the current Variation ID.\n") print("\nGet a dataexport from the plentymarket site from the variation attributes, in order to access the current Variation ID.\n")
71 129
130 step += 1
72 131 try: try:
73 export = askopenfilename(initialdir="../",
132 export = askopenfilename(initialdir=recent_path,
74 133 title="The Export File from Plentymarkets as .csv", title="The Export File from Plentymarkets as .csv",
75 134 filetypes=[ ("csv files", "*.csv") ]) filetypes=[ ("csv files", "*.csv") ])
76 except FileNotFoundError: # pylint:disable=invalid-name,used-before-assignment
77 print("No Export File!")
135 except OSError as fexc:
136 fileNotFoundLog(log_path=log_folder, step_number=step, step_desc=step_name[step], file_name=fexc)
78 137 except Exception as exc: except Exception as exc:
79 138 print(exc) print(exc)
80 139 print("Something went wrong at the Export file import!") print("Something went wrong at the Export file import!")
 
... ... def main():
83 142
84 143 try: try:
85 144 print("Active, properties , features & price Upload") print("Active, properties , features & price Upload")
145 step += 1
86 146 featureUpload(flatfile=sheet, feature='color_map', feature_id=1, folder=upload_folder) featureUpload(flatfile=sheet, feature='color_map', feature_id=1, folder=upload_folder)
87 147 featureUpload(flatfile=sheet, feature='item_name', feature_id=13, folder=upload_folder) featureUpload(flatfile=sheet, feature='item_name', feature_id=13, folder=upload_folder)
88 148 featureUpload(flatfile=sheet, feature='sleeve_type', feature_id=8, folder=upload_folder) featureUpload(flatfile=sheet, feature='sleeve_type', feature_id=8, folder=upload_folder)
89 149 featureUpload(flatfile=sheet, feature='pattern_type', feature_id=11, folder=upload_folder) featureUpload(flatfile=sheet, feature='pattern_type', feature_id=11, folder=upload_folder)
90 150 featureUpload(flatfile=sheet, feature='collar_style', feature_id=12, folder=upload_folder) featureUpload(flatfile=sheet, feature='collar_style', feature_id=12, folder=upload_folder)
151 step += 1
91 152 setActive(sheet, export, upload_folder) setActive(sheet, export, upload_folder)
153 step += 1
92 154 itemPropertyUpload(sheet, export, upload_folder) itemPropertyUpload(sheet, export, upload_folder)
155 step += 1
93 156 priceUpload(sheet, export, upload_folder) priceUpload(sheet, export, upload_folder)
94 except FileNotFoundError as err:# pylint:disable=invalid-name,used-before-assignment
157 except KeyError as kexc:
158 keyErrorLog(log_path=log_folder, step_number=step, step_desc=step_name[step], key_name=kexc, file_name=ntpath.basename(sheet))
159 except UnboundLocalError as uexc:
160 unboundLocalLog(log_path=log_folder, step_number=step, step_desc=step_name[step], filename=ntpath.basename(sheet), variable_name=uexc.args)
161 except OSError as err:
95 162 print(err) print(err)
96 163 print("Missing Data, check if you have\n - a flatfile\n - a intern file table\n - export file from plentymarkets\n - a sheet with the stock numbers!\n") print("Missing Data, check if you have\n - a flatfile\n - a intern file table\n - export file from plentymarkets\n - a sheet with the stock numbers!\n")
97 164 sys.exit() sys.exit()
98 165
99 166 print("\nOpen your amazon storage report and save it as an csv.\n") print("\nOpen your amazon storage report and save it as an csv.\n")
100 167
101 stocklist = askopenfilename(initialdir="../",
102 title="The Stockreport from Amazon as .csv",
103 filetypes=[ ("csv files", "*.csv") ])
104 print("spreadsheet csv containing the FNSKU and ASIN : ", stocklist)
168 step += 1
169 try:
170 stocklist = askopenfilename(initialdir=recent_path,
171 title="The Stockreport from Amazon as .csv",
172 filetypes=[ ("csv files", "*.csv") ])
173 print("spreadsheet csv containing the FNSKU and ASIN : ", stocklist)
174 except OSError as fexc:
175 fileNotFoundLog(log_path=log_folder, step_number=step, step_desc=step_name[step], file_name=fexc)
105 176
106 EANUpload(sheet, export, stocklist, upload_folder)
177 step += 1
178 try:
179 EANUpload(sheet, export, stocklist, upload_folder)
180 except KeyError as kexc:
181 keyErrorLog(log_path=log_folder, step_number=step, step_desc=step_name[step], key_name=kexc, file_name=ntpath.basename(sheet))
182 except UnboundLocalError as uexc:
183 unboundLocalLog(log_path=log_folder, step_number=step, step_desc=step_name[step], filename=ntpath.basename(sheet), variable_name=uexc.args)
107 184
108 185 print("\nCreate a upload file for the SKU and Parent_SKU\nto connect existing items from amazon to plentyMarkets.\n") print("\nCreate a upload file for the SKU and Parent_SKU\nto connect existing items from amazon to plentyMarkets.\n")
109 186
110 amazonSkuUpload(sheet, export, upload_folder)
187 step += 1
188 try:
189 amazonSkuUpload(sheet, export, upload_folder)
190 except KeyError as kexc:
191 keyErrorLog(log_path=log_folder, step_number=step, step_desc=step_name[step], key_name=kexc, file_name=ntpath.basename(sheet))
192 except UnboundLocalError as uexc:
193 unboundLocalLog(log_path=log_folder, step_number=step, step_desc=step_name[step], filename=ntpath.basename(sheet), variable_name=uexc.args)
111 194
112 195 print("\nCreate a upload file for the additional Information to Amazon Products like bullet points, lifestyle etc.\n") print("\nCreate a upload file for the additional Information to Amazon Products like bullet points, lifestyle etc.\n")
113 196
114 amazonDataUpload(sheet, export, upload_folder)
197 step += 1
198 try:
199 amazonDataUpload(sheet, export, upload_folder)
200 except KeyError as kexc:
201 keyErrorLog(log_path=log_folder, step_number=step, step_desc=step_name[step], key_name=kexc, file_name=ntpath.basename(sheet))
202 except UnboundLocalError as uexc:
203 unboundLocalLog(log_path=log_folder, step_number=step, step_desc=step_name[step], filename=ntpath.basename(sheet), variable_name=uexc.args)
115 204
116 205 print("\nCollect the ASIN Numbers matching to the Variationnumber(Sku) and format them into the dataformat format.\n") print("\nCollect the ASIN Numbers matching to the Variationnumber(Sku) and format them into the dataformat format.\n")
117 206
118 asinUpload(export, stocklist, upload_folder)
207 step += 1
208 try:
209 asinUpload(export, stocklist, upload_folder)
210 except KeyError as kexc:
211 keyErrorLog(log_path=log_folder, step_number=step, step_desc=step_name[step], key_name=kexc, file_name=ntpath.basename(sheet))
212 except UnboundLocalError as uexc:
213 unboundLocalLog(log_path=log_folder, step_number=step, step_desc=step_name[step], filename=ntpath.basename(sheet), variable_name=uexc.args)
119 214
120 215 print("\nCollect the imagelinks from the flatfile, sorts them and assigns the variation ID.\n") print("\nCollect the imagelinks from the flatfile, sorts them and assigns the variation ID.\n")
121 216
217 step += 1
122 218 try: try:
123 219 imageUpload(sheet, export, upload_folder) imageUpload(sheet, export, upload_folder)
220 except KeyError as kexc:
221 keyErrorLog(log_path=log_folder, step_number=step, step_desc=step_name[step], key_name=kexc, file_name=ntpath.basename(sheet))
222 except UnboundLocalError as uexc:
223 unboundLocalLog(log_path=log_folder, step_number=step, step_desc=step_name[step], filename=ntpath.basename(sheet), variable_name=uexc.args)
124 224 except Exception as err: except Exception as err:
125 225 print(err) print(err)
126 226 print("Image Upload failed!") print("Image Upload failed!")
127 227
128 228 print("\nActivate Marketconnection for Ebay & Amazon for all variation.\n") print("\nActivate Marketconnection for Ebay & Amazon for all variation.\n")
129 229
230 step += 1
130 231 try: try:
131 232 marketConnection(export, upload_folder, ebay=1, amazon=1) marketConnection(export, upload_folder, ebay=1, amazon=1)
233 except KeyError as kexc:
234 keyErrorLog(log_path=log_folder, step_number=step, step_desc=step_name[step], key_name=kexc, file_name=ntpath.basename(sheet))
235 except UnboundLocalError as uexc:
236 unboundLocalLog(log_path=log_folder, step_number=step, step_desc=step_name[step], filename=ntpath.basename(sheet), variable_name=uexc.args)
132 237 except Exception as err: except Exception as err:
133 238 print(err) print(err)
134 239 print("Market connection failed!") print("Market connection failed!")
135 240
241 del moveon
242 del fexc
136 243 if __name__ == '__main__': if __name__ == '__main__':
137 244 main() main()
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/initBasti/Amazon2PlentySync

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/initBasti/Amazon2PlentySync

Clone this repository using git:
git clone git://git.rocketgit.com/user/initBasti/Amazon2PlentySync

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main